輸入某二叉樹的前序遍歷和中序遍歷的結果,請重建出該二叉樹。假設輸入的前序遍歷和中序遍歷的結果中都不含重複的數字。例如輸入前序遍歷序列和中序遍歷序列,則重建二叉樹並返回。
通常樹有如下幾種遍歷方式:
前序遍歷:先訪問根節點,再訪問左子節點,最後訪問右子節點。前序遍歷序列中,第乙個數總是樹的根節點的值。在中序遍歷序列中,根節點的值在序列的中間,左子樹的節點的值位於根節點的值的左邊,而右子樹的節點的值位於根節點的值的右邊。中序遍歷:先訪問左子節點,再訪問根節點,最後訪問右子節點。
後序遍歷:先訪問左子節點,再訪問右子節點,最後訪問根節點。
例如:前序遍歷序列:
中序遍歷序列:
第一步:在中序遍歷序列裡找到根節點1,分成左右兩邊分別為左右子樹
前序遍歷序列:1,
中序遍歷序列:,1,
所以前序遍歷裡的左右子樹可以根據中序遍歷確定
前序遍歷序列:1,,
中序遍歷序列:,1,
第二步:在左右子樹中採用同樣方法,找到根節點,繼續分
前序遍歷序列:2,
中序遍歷序列:,2
前序遍歷序列:3,,
中序遍歷序列:,3,
第三步:繼續…
public
class
solution
private treenode reconstructbinarytreecore
(int
pre,
int startpre,
int endpre,
int[
] in,
int startin,
int endin)
// 樹的根結點為前序遍歷的第乙個數
treenode root =
newtreenode
(pre[startpre]);
for(
int i = startin; i <= endin; i++)}
return root;
}}
劍指offer04 重建二叉樹
輸入某二叉樹的前序遍歷和中序遍歷的結果,請重建出該二叉樹。假設輸入的前序遍歷和中序遍歷的結果中都不含重複的數字。例如輸入前序遍歷序列和中序遍歷序列,則重建二叉樹並返回。首先要知道二叉樹的三種遍歷方式 先序 中序 後序 先序 根左右 中序 左根右 後序 左右根 如何根據先序和中序 或者中序和後續 重建...
劍指offer04 重建二叉樹
題目 輸入某二叉樹的前序遍歷和中序遍歷的結果,請重建出該二叉樹。假設輸入的前序遍歷和中序遍歷的結果中都不含重複的數字。例如輸入前序遍歷序列和中序遍歷序列,則重建二叉樹並返回。思路 設前序遍歷序列為pre,中序遍歷序列為in,則易知 1 root pre 0 2 in 中 root 的位置 索引 將 ...
劍指offer04重建二叉樹
輸入某二叉樹的前序遍歷和中序遍歷的結果,請重建出該二叉樹。假設輸入的前序遍歷和中序遍歷的結果中都不含重複的數字。例如輸入前序遍歷序列和中序遍歷序列,則重建二叉樹並返回。通過前序的第乙個點,對中序切分 左半邊和右半邊,然後對前序也切分為左半邊和右半邊,遞迴 definition for binary ...