二叉查詢樹(binary search tree)是一種特殊的二叉樹,它是一種查詢結構,一棵二叉查詢樹是一棵二叉樹,且具有以下性質:
(1)若左子樹不空:左子樹上所有節點值均小於等於該節點的值;
(2)若右子樹不空,右子樹上所有節點值均大於等於該節點的值;
(3)左右子樹也同樣是二叉查詢樹(遞迴定義);
(4)等於的情況只能出現在二叉查詢樹的一側,一般的二叉查詢樹無重複節點
二叉查詢樹的資料結構定義與普通二叉樹一樣:
/*二叉查詢樹資料結構定義*/
struct treenode
};
二叉查詢樹的節點插入
分為遞迴和非遞迴(迴圈)兩種方式:
/*
二叉查詢樹的節點插入(遞迴)
核心:找到待插入節點的插入位置
將插入節點的val值與當前節點的val值作比較
若insert_node->valval: 若左子樹空,直接插入,否則在左子樹中繼續搜尋;
若insert_node->val>node->val: 若右子樹空,直接插入,否則在右子樹中繼續搜尋。
*/void bst_insert(treenode* node, treenode* insert_node)
else
} else else
}}
/*
二叉查詢樹的節點插入(迴圈)
核心:找到待插入節點的插入位置
*/void bst_insert(treenode* node, treenode* insert_node)
node = node->left;
} else
node = node->right;
} }}
二叉查詢樹的節點查詢
也分為歸和非遞迴(迴圈)兩種方式:
/*
二叉查詢樹的節點查詢(遞迴)
若當前節點的val==目標value,說明找到了,return true
若當前節點的val《目標value,若當前節點無左子樹,直接return false,否則查詢左子樹;
若當前節點的val>目標value,若當前節點無右子樹,直接return false,否則查詢右子樹;
*/bool bst_search (treenode* node, int value)
if (value < node->val)
else
} else else
}}
/*
二叉查詢樹的節點查詢(迴圈)
*/bool bst_search (treenode* node, int value)
if (value < node->val)
else
} return false;
}
在二叉查詢樹中插入節點
給定一棵二叉查詢樹和乙個新的樹節點,將節點插入到樹中。你需要保證該樹仍然是一棵二叉查詢樹。樣例給出如下一棵二叉查詢樹,在插入節點6之後這棵二叉查詢樹可以是這樣的 2 2 1 4 1 4 3 3 6 definition of treenode public class treenode public...
在二叉查詢樹中插入節點
描述 給定一棵二叉查詢樹和乙個新的樹節點,將節點插入到樹中。你需要保證該樹仍然是一棵二叉查詢樹。樣例 給出如下一棵二叉查詢樹,在插入節點6之後這棵二叉查詢樹可以是這樣的 2 2 1 4 1 4 3 3 6 解題思路 要在二叉查詢樹的定義,如果要新增的節點值比根節點小,則把它新增到根節點的左子樹,若要...
在二叉查詢樹中插入節點
題目 給定一棵二叉查詢樹和乙個新的樹節點,將節點插入到樹中。你需要保證該樹仍然是一棵二叉查詢樹。樣例 給出如下一棵二叉查詢樹,在插入節點6之後這棵二叉查詢樹可以是這樣的 2 2 1 4 1 4 3 3 6 思路 根據二叉排序樹的性質,比根節點小的結點作為左子樹,比根節點大的結點作為右子樹,通過將插入...