python二叉树去重_python二叉树学习分享
介紹:樹形結構是應用相當廣泛的一種非線性結構,建立與應用大多使用鏈表來處理,當然也可用連續的列表來實現
常見概念:
滿二叉樹:如果樹高位H,樹的結點總數為2*H-1,H>=0,稱為滿二叉樹
完全二叉樹:高度為H,節點數小于2*H-1,但節點的編號方式與滿二叉樹一致
斜二叉樹:當一個二叉樹完全沒有左節點或者右節點的時候,稱為左斜二叉樹或者右斜二叉樹
嚴格二叉樹:每一個非終端的節點均有非空的左右子樹
1.用數組實現二叉樹
規則:左子樹的節點索引值是父節點索引值乘2
右子樹的節點索引值是父節點索引值乘2加1
每一個樹根的值大于左子樹值小于友子樹值
創建函數:
defBetree(betree,data,length):for i in range(1,length):
level= 1
while betree[level] !=0:if betree[level] >data[i]:
level= level*2
else:
level= level*2+1betree[level]=data[i]return betree
2.鏈表實現二叉樹
有點:節點的增加和刪除容易實現,缺點:很難找到父節點
classtree:def __init__(self):
self.data=0
self.left=None
self.right=None
def creat_tree(root,val):
newnode=tree()
newnode.data=val
newnode.left=None
newnode.right=None
if root==None:
root=newnode
return root
else:
current=root
while current != None:
backup = current
if current.data > val:
current=current.left
else:
current=current.right
if backup.data > val:
backup.left = newnode
else:
backup.right = newnode
3.二叉樹遍歷
三種遍歷方法:
#中序遍歷
definorder(ptr):if ptr !=None:
inorder(ptr.left)print("%4d"%ptr.data,end="")
inorder(ptr.right)print()#后序遍歷
defpostorder(ptr):if ptr !=None:
postorder(ptr.left)
postorder(ptr.right)print("%4d"%ptr.data,end="")print()#前序遍歷
defpreorder(ptr):if ptr !=None:print("%4d"%ptr.data,end="")
preorder(ptr.left)
preorder(ptr.right)
4.二叉樹節點查找
原則:從樹根出發進行比較,如果小于樹根,左子樹查找,大于樹根,右子樹查找,找到要查找的值
defsearch(ptr,val):whileTrue:if ptr ==None:returnNoneif ptr.data ==val:returnptrelse:if ptr.data >val:
ptr=ptr.leftelse:
ptr= ptr.right
5.二叉樹節點的刪除
a.刪除的節點位葉子,只需將與其相連的父節點指向None
b.刪除節點只有一棵子樹,將其子樹移到該節點的父節點指向
c.刪除節點有左右兩個子樹,將左右子樹中值較大的子樹移到該結點處
總結
以上是生活随笔為你收集整理的python二叉树去重_python二叉树学习分享的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: u盘里的系统怎么复制到电脑系统文件在哪里
- 下一篇: websocket python爬虫_p