使用結點和引用實現二叉樹
# -*- coding: utf-8 -*-
"""created on sat apr 19 22:42:32 2019
@author: 86156
"""#二叉樹的實現
class
binarytree
:#根初始化
def__init__
(self,rootobj)
: self.key=rootobj
self.leftchild=
none
self.rightchild=
none
#插入左結點
definsertleft
(self,newnode)
:if self.leftchild==
none
: self.leftchild=binarytree(newnode)
else
: t=binarytree(newnode)
t.leftchild=self.leftchild
self.leftchild=t
#插入右結點
definsertright
(self,newnode)
:if self.rightchild==
none
: self.rightchild=binarytree(newnode)
else
: t=binarytree(newnode)
t.rightchild=self.rightchild
self.rightchild=t
#獲取左子樹
defgetrightchild
(self)
:return self.rightchild
#獲取右子樹
defgetleftchild
(self)
:return self.leftchild
#設定根植
defsetrootval
(self,obj)
: self.key=obj
defgetrootval
(self)
:return self.key
r=binarytree(
'a')
print
(r.getrootval())
print
(r.getleftchild())
r.insertleft(
'b')
print
(r.getleftchild())
print
(r.getleftchild(
).getrootval())
r.insertright(
'c')
print
(r.getrightchild())
print
(r.getrightchild(
).getrootval)
r.getrightchild(
).setrootval(
'hello'
)print
(r.getrightchild(
).getrootval(
))
從上往下列印出二叉樹的每個節點,同層節點從左至右列印。
def
printfromtoptobottom
(root):if
not root:
#二叉樹為空
return
lst=
result=
while
len(lst)
: t=lst.pop(0)
if t.left:
if t.right:
return result
二叉樹列印
舉例 1.初始化時,last 1,把1放入佇列 2.將1出隊,把1的子孩子2,3放入佇列,更新nlast 3 3.nlast更新完之後,列印上一次出隊的1,並和last比較,如果相同就列印換行,並更新last nlast 3 4.將2出隊,把2的子孩子4放入佇列,更新nlast 4 5,nlast更...
二叉樹列印
給定一顆二叉樹的頭節點head,請按照現在大家看到的這種格式列印 要求列印成 12 主要解決的問題是 如何換行 last 表示正在列印的當前行的最右節點 從左至右遍歷,如果遍歷到last節點,說明該換行了,換行之後,只需要nlast last,繼續下一行的列印過程,一直重複,直到所有的節點都列印完。...
列印二叉樹
之前在了解二叉樹旋轉的時候,為了方便檢視中間狀態,就寫了個以樹狀形式列印二叉樹的函式。起初是使用二叉樹中序遍歷的結果展開的方式,簡單但列印出來的樹有一定的傾斜。例如這棵樹 5 3 7 2 6 8它的中序遍歷結果為 2 3 5 6 7 8 列印出來的結果中,節點 3 和節點 7 不是對稱的。因為節點 ...