本文採用python語言編寫資料結構之二叉搜尋樹,主要實現二叉樹的構造,插入資料,刪除資料,以及二叉樹的中序遍歷,先序遍歷,和後序遍歷。
具體**如下:
#構造二叉樹結構,及屬性
class
tree
(object):
def__init__
(self):
self.root=none
class
node
(object):
def__init__
(self,x):
self.key=x
self.left=none
self.right=none
self.parent=none
#插入二叉樹資料
deftreeinsert
( t, z):
y =none
x = t.root
while x != none:
y = x
if z.key < x.key:
x = x.left
else:
x = x.right
z.parent = y
if y == none:
t.root = z
elif z.key < y.key:
y.left = z
else:
y.right = z
z.left = none
z.right = none
return z.key
#刪除節點
deftransplant
(t,u,v):
if u.parent==none:
t.root=v
elif u==u.parent.left:
u.parent.left=v
else:
u.parent.right=v
if v!=none:
v.parent=u.parent
deftreemin
(x):
while x.left !=none:
x=x.left
return x
deftreedelete
(t,z):
if z.left==none:
transplant(t,z,z.right)
elif z.right==none:
transplant(t,z,z.left)
else:
y=treemin(z.right)
if y.parent!=z:
transplant(t,y,y.right)
y.right=z.right
y.right.parent=y
transplant(t,z,y)
y.left=z.left
y.left.parent=y
return z.key
#中序遍歷
defmidsort
(root):
if root!= none:
midsort(root.left)
if root.key!=0:
print(root.key)
midsort(root.right)
#先序遍歷
defbehsort
(root):
if root!= none:
behsort(root.left)
behsort(root.right)
if root.key != 0:
print(root.key)
#後序遍歷
defpresort
(root):
if root!= none:
if root.key != 0:
print(root.key)
presort(root.left)
presort(root.right)
#構造二叉樹例項物件
node=[5,9,6,8,7,2,1,10]
t=tree()
#插入二叉樹資料
for nodes in node:
print('插入資料',treeinsert(t,node(nodes)))
#刪去乙個節點
print('刪去節點',treedelete(t,t.root))
#中序遍歷
print('中序遍歷')
midsort(t.root)
#後序遍歷
print('後序遍歷')
behsort(t.root)
#先序遍歷
print('先序遍歷')
presort(t.root)
執行結果如下:
二叉搜尋樹 二叉搜尋樹
題目 二叉搜尋樹 time limit 2000 1000 ms j a others memory limit 32768 32768 k j a others total submission s 6945 accepted submission s 3077 problem descripti...
二叉搜尋樹 修剪二叉搜尋樹
第一反應是重構,看來別人的解答發現,其實不用重構那麼複雜。treenode trimbst treenode root,int low,int high if root val high 下一層處理完左子樹的結果賦給root left,處理完右子樹的結果賦給root right。root left ...
python實現二叉搜尋樹
二叉搜尋樹 binary search tree 又名二叉排序樹 binary sort tree 二叉搜尋樹是具有有以下性質的二叉樹 1 若左子樹不為空,則左子樹上所有節點的值均小於或等於它的根節點的值。2 若右子樹不為空,則右子樹上所有節點的值均大於或等於它的根節點的值。3 左 右子樹也分別為二...