劍指offer 4 重建二叉樹

2022-09-08 02:57:08 字數 3619 閱讀 2963

二叉樹種類

1.二叉樹的高度

class

treenode(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. 分層列印二叉樹

class

treenode:

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

class

solution:

#返回二維列表[[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. 判斷是否為平衡二叉樹

class

treenode():

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 重建二叉樹

輸入某二叉樹的前序遍歷和中序遍歷的結果,請重建出該二叉樹。假設輸入的前序遍歷和中序遍歷的結果中都不含重複的數字。例如輸入前序遍歷序列和中序遍歷序列,則重建二叉樹並返回。演算法設計思想 前序遍歷序列的第乙個元素為根結點的值,然後在中序遍歷序列中尋找根節點的值的位置 索引 從中序遍歷序列的起始位置到根結...