重建二叉樹(前中序 遞迴)

2021-10-09 11:20:25 字數 885 閱讀 8292

lettcode題目位址

輸入某二叉樹的前序遍歷和中序遍歷的結果,請重建該二叉樹。假設輸入的前序遍歷和中序遍歷的結果中都不含重複的數字。

例如,給出

前序遍歷 preorder = [3,9,20,15,7]

中序遍歷 inorder = [9,3,15,20,7]

思路:前序遍歷的陣列按照 【根節點 | 左子樹 | 右子樹】排列

中序遍歷的陣列按照 【左子樹 | 根節點 | 右子樹】排列

因為陣列中的節點值不重複,所以我們可以根據前序遍歷的首節點值,來確定在中序遍歷序列中的根節點值位置。

然後確定當前節點的值即為該根節點。然後分別遞迴中序遍歷序列中的左子樹和中序遍歷序列中的右子樹。

遞迴函式的引數:前序遍歷序列中當前根節點的下標k,中序遍歷序列的左邊界left,中序遍歷序列的右邊界right。

遞迴的出口:如果左邊界left > 右邊界right,則表示當前無子樹,可以直接返回

遞迴函式的工作:設定前序遍歷序列中下標k所在的數為當前子樹的根節點。然後遍歷一下中序遍歷序列left - right 的區間,找到中序遍歷序列中的根節點下標index,再次遞迴左子樹 【k + 1,left,index - 1】和右子樹【k + (index - left) +1,index + 1,right】

返回值:每個函式返回自己這顆子樹的根節點。

class

solution

treenode recur

(int pre_root,

int in_left,

int in_right)

}

重建二叉樹(前序和中序)

根據二叉樹的前序輸出和中序輸出重建這顆二叉樹 劍指offer上的一道題,思路 前序遇到的第乙個元素肯定是根節點,先建立乙個根節點,然後將這個值在中序序列中查詢他的位置用leftcount記錄,找到後將該值左面和右邊分別遞迴。include include include includeusing n...

重建二叉樹(前序,中序序列建樹)

題目描述 輸入某二叉樹的前序遍歷和中序遍歷的結果,請重建出該二叉樹。假設輸入的前序遍歷和中序遍歷的結果中都不含重複的數字。例如輸入前序遍歷序列和中序遍歷序列,則重建二叉樹並返回。definition for binary tree struct treenode class solution 根據根...

重建二叉樹 前序遍歷和中序遍歷

主要程式設計思想 由於前序遍歷第乙個數永遠是根,中序遍歷根左邊是左子樹,右邊衛右子樹。因此,每次找到乙個根節點,前序遍歷就可以分成左子樹序列和右子樹序列,中序遍歷也可以分成左子樹序列和右子樹序列,分別建立左子樹和右子樹,所以是非常典型的遞迴問題 treenode rebuildtree vector...