1. 二叉查詢樹的定義:
左子樹不為空的時候,左子樹的結點值小於根節點,右子樹不為空時,右子樹的結點值大於根節點,左右子樹分別為二叉查詢樹
2. 二叉查詢樹的最左邊的結點即為最小值,要查詢最小值,只需遍歷左子樹的結點直到為空為止,同理,最右邊的結點結尾最大值,要查詢最大值,只需遍歷右子樹的結點直到為空為止。二叉查詢樹的插入查詢和刪除都是通過遞迴的方式來實現的,刪除乙個結點的時候,先找到這個結點s,如果這個結點左右孩子都不為空,這時並不是真正的刪除這個結點s,而是在其右子樹找到後繼結點,將後繼結點的值付給s,然後刪除這個後繼結點即可。如果結點s的左孩子或者右孩子為空,可以直接刪除這個結點s。
3. 二叉查詢樹的python實現:
class treenode:
def __init__(self,val):
self.val=val;
self.left=none;
self.right=none;
def insert(root,val):
if root is none:
root=treenode(val);
else:
if valroot.val:
root.right=insert(root.right,val);
return root;
def query(root,val):
if root is none:
return ;
if root.val is val:
return 1;
if root.val root.val:
return delnum(root.right,val);
else: # 刪除要區分左右孩子是否為空的情況
if(root.left and root.right):
tmp=finmin(root.right); #找到後繼結點
root.val=tmp.val;
root.right=delnum(root.right,val); #實際刪除的是這個後繼結點
else:
if root.left is none:
root=root.right;
elif root.right is none:
root=root.left;
return root;
#測試**
root=treenode(3);
root=insert(root,2);
root=insert(root,1);
root=insert(root,4);
#print query(root,3);
print query(root,1);
root=delnum(root,1);
print query(root,1);
二叉查詢樹,實現
public class binarytree 移除乙個節點 分三種情況,乙個是 該節點本身是葉子,乙個是 該節點含有乙個兒子節點 乙個是 該節點還有兩個兒子節點 param e param comareelement private binarynoderemove element e,binar...
Python 二叉查詢樹
二叉搜尋樹 binary search tree 又名二叉排序樹 binary sort tree 二叉搜尋樹是具有有以下性質的二叉樹 1 若左子樹不為空,則左子樹上所有節點的值均小於或等於它的根節點的值。2 若右子樹不為空,則右子樹上所有節點的值均大於或等於它的根節點的值。3 左 右子樹也分別為二...
python 二叉樹查詢 Python二叉樹搜尋
stack depth is initialised to 0 def find in tree node,find condition,stack depth assert stack depth max stack depth deeper than max depth stack depth ...