劍指Offer4 重建二叉樹

2021-10-01 07:57:41 字數 1595 閱讀 2666

輸入某二叉樹的前序遍歷和中序遍歷的結果,請重建出該二叉樹。假設輸入的前序遍歷和中序遍歷的結果中都不含重複的數字。例如輸入前序遍歷序列和中序遍歷序列,則重建二叉樹並返回。

中心還是使用遞迴思想,前序遍歷序列中,第乙個數字總是樹的根結點的值。在中序遍歷序列中,根結點的值在序列的中間,左子樹的結點的值位於根結點的值的左邊,而右子樹的結點的值位於根結點的值的右邊。

/**

* definition for binary tree

* struct treenode

* };

*/class solution

vector<

int> left_pre, right_pre, left_vin, right_vin;

treenode* head = new treenode

(pre[0]

);int root =0;

for(

int i =

0; i < pre.

size()

; i++)}

for(

int i =

0; i < root; i++

)for

(int i = root+

1; i < pre.

size()

; i++

) head->left =

reconstructbinarytree

(left_pre,left_vin)

; head->right =

reconstructbinarytree

(right_pre,right_vin)

;return head;}}

;

# -*- coding:utf-8 -*-

# class treenode:

# def __init__(self, x):

# self.val = x

# self.left = none

# self.right = none

class

solution

:# 返回構造的treenode根節點

defreconstructbinarytree

(self, pre, tin):if

len(pre)==0

:return

none

elif

len(pre)==1

:return treenode(pre[0]

)else

: a = treenode(pre[0]

) b = tin.index(pre[0]

) a.left = self.reconstructbinarytree(pre[

1:b+1]

, tin[

:b])

a.right = self.reconstructbinarytree(pre[b+1:

], tin[b+1:

])return a

劍指offer4 重建二叉樹

給出前序遍歷和中序遍歷,重新構建二叉樹.重建二叉樹主要就是遞迴,每一次新增乙個結點進入二叉樹,保證遞迴的順序和前序遍歷順序一致就ok了,多以左子樹的遞迴在前面,右子樹的遞迴放在後面,和前序遍歷的順序一致,第一次遞迴新增前序遍歷陣列中的第乙個,第二次遞迴新增的是前序遍歷陣列中的第二個.第n個就是陣列中...

劍指offer 4 重建二叉樹

題目描述 輸入某二叉樹的前序遍歷和中序遍歷的結果,請重建出該二叉樹。假設輸入的前序遍歷和中序遍歷的結果中都不含重複的數字。例如輸入前序遍歷序列和中序遍歷序列,則重建二叉樹並返回。思路 中序序列中,節點左邊為左子樹,右邊為右子樹。前序第乙個為根節點 12 4 7 3 5 6 8 左 4 7 215 3...

劍指offer 4 重建二叉樹

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