(演算法整理)二叉查詢樹的節點插入與節點查詢

2021-08-20 22:50:54 字數 1474 閱讀 2539

二叉查詢樹(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 思路 根據二叉排序樹的性質,比根節點小的結點作為左子樹,比根節點大的結點作為右子樹,通過將插入...