1'''2樹:3
每乙個結點都有零個或多個子結點
4沒有父節點的節點稱為根節點
5每乙個非根結點有且只有乙個父結點
6除了根結點外,每乙個子節點可以分為多個不相交的子樹
7二叉樹性質:
8在二叉樹的第 i 層 最多有 2^(i-1) 個結點
9深度為 k 的二叉樹最多有 2^k - 1 個結點
10葉子結點數為 n0 度數為 2 的結點數為 n2
11n0 = n2 + 1
12具有 n 個結點的完全二叉樹的深度為 log2(n+1)
13完全二叉樹:
14編號為 i 的結點
15左孩子 -> 2i
16右孩子 -> 2i + 1
17左孩子 的 父結點 編號必為 i/2
1819
'''20
class
node(object):
21'''
定義乙個結點,有左孩子和右孩子
'''22
def__init__
(self,data):23#
結點資料
24 self.data =data25#
左、右 孩子指向為空
26 self.lchild =none
27 self.rchild =none
2829
class
binarytree(object):
30'''
定義二叉樹
'''31
def__init__
(self):32#
根結點預設為空
33 self.root =none
3435
defadd(self,data):36#
新增資料到二叉樹中 向最後進行新增資料37#
處理順序:父結點 左孩子 右孩子
38 node =node(data)39#
如果為空樹
40if self.root is
none:
41 self.root =node42#
空樹,加入資料則放在根節點處
43return
44 queue =[self.root]45#
新增根節點,作為存在該結點的標誌
46while
queue:47#
如果 queue 不為空
48 cur_node =queue.pop(0)49#
當前結點指向根節點,取第乙個元素
50if cur_node.lchild is
none :51#
如果左結點為空
52 cur_node.lchild =node
53return
54else:55
#新增到指標內,證明存在左結點
5657
if cur_node.rchild is
none:58#
如果右結點為空
59 cur_node.rchild =node
60return
61else:62
#新增到指標內,證明存在右結點
2020-04-17
複習 二叉樹 樹
樹是一種很常用的資料結構,日後的學習中會經常碰到運用樹的知識。構造二叉樹 include include include using namespace std 二叉排序樹或者是一棵空樹,或者是具有下列性質的二叉樹 1 若左子樹不空,則左子樹上所有結點的值均小於或等於它的根結點的值 2 若右子樹不空...
建立二叉樹 後序建立二叉樹
由後序遍歷可知,輸入順序是左結點 右結點 子樹根結點 比如輸入如下樹 ab cde 輸入序列為 e d b c a 思路 使用棧,對左結點和右結點進行壓棧 1.當輸入遇到非 且棧中元素大於等於2,則可以確定乙個小三角樹形,並將這個樹根作為下乙個小三角樹形的乙個子節點 2.當輸入遇到非 但棧中元素小於...
複習二叉樹之線索二叉樹
include 線索二叉樹是在遍歷的過程中線索化 typedef struct bithrnodebithrnode,bithrtree bithrtree pre 全域性變數 建立二叉鍊錶 先序遍歷建立 關鍵在於 表明空樹 void createbitree bithrtree a else 為什...