劍指Offer(04) 重建二叉樹

2021-09-14 06:12:54 字數 1187 閱讀 5079

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

通常樹有如下幾種遍歷方式:

前序遍歷:先訪問根節點,再訪問左子節點,最後訪問右子節點。

中序遍歷:先訪問左子節點,再訪問根節點,最後訪問右子節點。

後序遍歷:先訪問左子節點,再訪問右子節點,最後訪問根節點。

前序遍歷序列中,第乙個數總是樹的根節點的值。在中序遍歷序列中,根節點的值在序列的中間,左子樹的節點的值位於根節點的值的左邊,而右子樹的節點的值位於根節點的值的右邊。

例如:前序遍歷序列:

中序遍歷序列:

第一步:在中序遍歷序列裡找到根節點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 ...