二叉樹種類
1.二叉樹的高度
classtreenode(object):
def__init__
(self, x):
self.val =x
self.left =none
self.right =none
class
solution(object):
defmaxheight(self, root):
if root==none:
return
0 leftheight=self.maxheight(root.left)
rightheight=self.maxheight(root.right)
if leftheight>=rightheight:
return leftheight+1
else
:
return rightheight+1
2. 分層列印二叉樹
classtreenode:
def__init__
(self,x):
self.val =x
self.left =none
self.right =none
class
solution:
defprintbinary(self, root):
queue =
res =
if root =none:
return
while
queue:
newnode =queue.pop(0)
if(newnode.left):
if(newnode.right):
return res
classsolution:
#返回二維列表[[1,2],[4,5]]
defprint(self, proot):
#write code here
result =
nodelist =
if proot ==none:
return
result
while
nodelist:
result_layer =
nextlayernodelist =
for node in
nodelist:
ifnode.left:
ifnode.right:
nodelist =nextlayernodelist
return result
3. 判斷是否為平衡二叉樹
classtreenode():
def__init__
(self,x):
self.val =x
self.left =none
self.right =none
class
solution:
defgetdeepth(self,root):
if root is
none:
return
0 nright =self.getdeepth(root.right)
nleft =self.getdeepth(root.left)
return max(nright,nleft)+1
defisbalance_solution(self,proot):
if proot is
none:
return
true
right =self.getdeepth(proot.right)
left =self.getdeepth(proot.left)
if abs(right - left) > 1:
return
false
return self.isbalance_solution(proot.right) and self.isbalance_solution(proot.left)
題目:輸入某二叉樹的前序遍歷和中序遍歷的結果,請重建出該二叉樹。假設輸入的前序遍歷和中序遍歷的結果中都不含重複的數字。例如輸入前序遍歷序列和中序遍歷序列,則重建二叉樹並返回。
思路:1. 前序遍歷首位是根節點,找到根節點之後,根據中序遍歷找到左右子樹
2. 把找到的根節點從pre裡刪除,分別找到1中的左右子樹, preleft preright vinleft vinright
3. 然後左右子樹帶入1中
/*function treenode(x)
*/function
reconstructbinarytree(pre, vin)
}else
if(pre.length===1)
}return
result;
}
4. 重建二叉樹
-*- coding:utf-8 -*-#先序遍歷特點:第乙個值是根節點
#中序遍歷特點:根節點左邊都是左子樹,右邊都是右子樹
#思路:
#1.首先根據根節點a將中序遍歷劃分為兩部分,左邊為左子樹,右邊為右子樹
#2.使用遞迴,左右子樹再次;;;
#最後合成一棵樹
class
treenode:
def__init__
(self, x):
self.val =x
self.left =none
self.right =none
class
solution:
defre(self,pre,tin):
ifnot pre or
nottin:
return none #
要求返回的是二叉樹,不是陣列
root =treenode(pre.pop(0))
index =tin.index(root.val)
root.left =self.re(pre, tin[:index])
root.right = self.re(pre, tin[index+1:])
return root
5. 二叉樹的映象
#交換所有非頁節點的子節點
-*- coding:utf -8 -*-
class
treenode:
def__init__
(self,x):
self.value =x
self.left =none
self.right =none
class
solution:
defmirror(self,root):
ifnot
root:
return
root
root.left, root.right =root.right, root.left
self.mirror(root.left)
self.mirror(root.right)
return root
劍指offer4 重建二叉樹
給出前序遍歷和中序遍歷,重新構建二叉樹.重建二叉樹主要就是遞迴,每一次新增乙個結點進入二叉樹,保證遞迴的順序和前序遍歷順序一致就ok了,多以左子樹的遞迴在前面,右子樹的遞迴放在後面,和前序遍歷的順序一致,第一次遞迴新增前序遍歷陣列中的第乙個,第二次遞迴新增的是前序遍歷陣列中的第二個.第n個就是陣列中...
劍指offer 4 重建二叉樹
題目描述 輸入某二叉樹的前序遍歷和中序遍歷的結果,請重建出該二叉樹。假設輸入的前序遍歷和中序遍歷的結果中都不含重複的數字。例如輸入前序遍歷序列和中序遍歷序列,則重建二叉樹並返回。思路 中序序列中,節點左邊為左子樹,右邊為右子樹。前序第乙個為根節點 12 4 7 3 5 6 8 左 4 7 215 3...
劍指offer 4 重建二叉樹
輸入某二叉樹的前序遍歷和中序遍歷的結果,請重建出該二叉樹。假設輸入的前序遍歷和中序遍歷的結果中都不含重複的數字。例如輸入前序遍歷序列和中序遍歷序列,則重建二叉樹並返回。演算法設計思想 前序遍歷序列的第乙個元素為根結點的值,然後在中序遍歷序列中尋找根節點的值的位置 索引 從中序遍歷序列的起始位置到根結...