排序二叉樹
亂序資料的插入的時候,需要遵從乙個準則:
由結果可以看出,排序二叉樹中利用中序遍歷可以獲得有序數列
例:對3,8,5,7,6,2,9,4,1亂序數字進行排列。
# 排序二叉樹
# 建立節點
class
node()
:def
__init__
(self, item)
: self.item = item
self.right =
none
self.left =
none
# 建立乙個樹
class
sorttree()
:def
__init__
(self)
: self.root =
none
# 插入節點
defadd
(self, item)
: node = node(item)
cur = self.root
# 判斷特殊情況:當根節點為空那麼直接賦值插入的第乙個元素
if self.root ==
none
: self.root = node
return
# 普通情況:若比根節點小插入到根節點左側,若比根節點大插入到根節點右側
while
true
:# 向右插入節點
if cur.item < item:
# 如果根節點小於插入節點
if cur.right ==
none
:# 插入節點的前提是右葉子節點空
cur.right = node
return
else
: cur = cur.right # 移位
# 向左插入節點
else
:if cur.left ==
none
: cur.left = node
return
else
: cur = cur.left
# 前序遍歷
defforward
(self, root)
:if root ==
none
:return
print
(root.item)
self.forward(root.left)
self.forward(root.right)
# 中序遍歷
defmiddle
(self, root)
:if root ==
none
:return
self.forward(root.left)
print
(root.item)
self.forward(root.right)
# 後序遍歷
defback
(self, root)
:if root ==
none
:return
self.forward(root.left)
self.forward(root.right)
print
(root.item)
alist =[3
,8,5
,7,6
,2,9
,4,1
]tree = sorttree(
)for i in alist:
tree.add(i)
# tree.forward(tree.root)
tree.middle(tree.root)
# tree.back(tree.root)
二叉樹,排序二叉樹
說到二叉樹,這可是資料結構裡面的非常重要的一種資料結構,二叉樹是樹的一種,本身具有遞迴性質,所以基於二叉樹的一些演算法很容易用遞迴演算法去實現。作為一種非線性結構,比起線性結構還是相對複雜的,很多人甚至看不懂演算法的意思,不能理解。其實一開始接觸這些東西還是挺暈的,不過你多看幾遍,上機實現可能你就會...
二叉樹學習筆記
二叉樹是樹的一種特殊結構,也是一種極為重要的樹,二叉樹最重要的操作是遍歷,即按照一定的順序訪問樹中的所有節點,常見的遍歷方式有 對遍歷來說,最容易想到的方式就是遞迴,遞迴 簡單,但是效率不高,需要的棧空間比較大,非遞迴的方法 較為複雜,不過效率較高。遞迴實現 void preordervisit b...
二叉樹學習筆記
1.訪問根節點 2.在訪問第 l 層時,將 l 1 層的節點按順序儲存到佇列中 3.進入下一層並訪問該層的所有節點 4.重複上述操作直到所有層都訪問完 時間複雜度 o n 空間複雜度o n 最壞的情況下,最後一層的所有節點可能在佇列中 void levelorder node root q.dele...