重建二叉樹,根據前序中序遍歷構建二叉樹

2021-10-09 07:22:11 字數 711 閱讀 5828

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

前序遍歷:根左右

中序遍歷:左根右

根據前序遍歷我們可以知道根節點,根據中序遍歷我們可以知道根節點的左右子樹結點有哪些。

如:前序: 中序

根據前序:知道根為 1,那麼左子樹就為中序的下標0-2,右子樹:4-7

那麼知道中序的下標,如何知道前序的下標了?

1在中序下標為3,由於是前序遍歷所以靠近根為左子樹,由中序知道左子樹有3(1的下標)-0=3個元素,所以在前序中就為1-3.

同理得右子樹就為3+1到7。

即左子樹下標範圍就是,根下標+1到左子樹元素個數

所以我們可用遞迴控制下標建立二叉樹,每次遞迴的前序序列的第乙個元素就為當前根。

/**

* definition for binary tree

* struct treenode

* };

*/class

solution

}return root;

} treenode*

reconstructbinarytree

(vector<

int> pre,vector<

int> vin)

};

重建二叉樹 根據前序遍歷和中序遍歷構建二叉樹

輸入某二叉樹的前序遍歷和中序遍歷的結果,請重建出該二叉樹。假設輸入的前序遍歷和中序遍歷的結果中都不含重複的數字。例如輸入前序遍歷序列和中序遍歷序列,則重建二叉樹並返回。思路 1.前序遍歷的第乙個節點一定是根結點。前序遍歷的乙個節點要麼是相鄰前乙個節點的左子樹 右子樹或者更靠近前面節點的右子樹。如何確...

07 二叉樹 根據前序和中序遍歷重建二叉樹

問題 輸入某二叉樹的前序遍歷和中序遍歷的結果,請重建該二叉樹。假設輸入的前序遍歷和中序遍歷的結果中都不含重複的數字。分析 1 先根據前序遍歷的第乙個節點root找到分界點i 2 將前序遍歷陣列和中序遍歷陣列按照分界點進行劃分 3 遞迴 實現 public treenode buildtree int...

重建二叉樹(根據二叉樹的前序和中序遍歷還原二叉樹)

思路 根據前序遍歷,我們可以知道二叉樹的根節點,根據這個跟節點我們可以在中序遍歷中找到該節點的位置k,小於k的節點均為該節點的左子樹,大於k的節點均為該節點的右子樹。這樣的話,我們就很容易想到遞迴的方式。每次遞迴都返回該子樹的根節點。public class solution public tree...