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

2021-06-18 05:24:29 字數 719 閱讀 7225

思路:

與已知前序遍歷的區別在於後序序列要從後向前的順序建立。

因為前序遍歷根節點在其所有子樹的前面,而後序遍歷的根節點在其所有字數的後面。關鍵在每次讀取兩個陣列的範圍問題:

1) in的邊界比較好確定:

有左子樹時為[start2,i-1];

有右子樹時為[i+1,end2]

2) aft的邊界要根據in確定:

有左子樹時根據aft和i求出左子樹節點個數為:i-start2。所以pre的邊界就要包括跳過前(end2-i)個右子樹節點, 即:從start1到end1-1-(end2-i)此時綜合in的邊界為[start1,end1-1-(end2-i),start2,i-1];

有右子樹時也要根據aft和i求出左子樹節點個數:i-start2。pre的邊界就包括前(end2-i)個節點, 即:從end1-(end2-i)到end1-1,此時綜合in的邊界為[end1-(end2-i),end1-1,i+1,end2]。

總之:在左子樹時一定要跨過前面屬於右子樹的節點,即使沒有右子樹(此時end2-i等於0)。

**如下:

aft為後續遍歷陣列,in為中序遍歷陣列,start和end為每次遞迴兩個陣列的起始與終止下標

binarytreenode* rebuild(int* aft,int*in,int start1,int end1,int start2,int end2)

根據二叉樹先序中序後序遍歷結果重建二叉樹 詳細解釋

c 二叉樹的建立 前中後序遍歷 以及遇到的坑 思路 1 二叉樹的先序遍歷的第乙個結點是根節點 2 中序遍歷的根節點左邊的序列是左子樹的結點,右邊的序列是右子樹的結點 3 左子樹和右子樹分別重複步驟1 2 步驟如下 這個無法給出正確的樹結構,因為先序 根左右 和後序 左右根 遍歷的左右孩子遍歷的順序一...

根據二叉樹的先序遍歷和中序遍歷重建二叉樹

輸入某二叉樹的前序遍歷和中序遍歷的結果,請重建出該二叉樹。假設輸入的前序遍歷和中序遍歷的結果中都不含重複的數字。例如輸入前序遍歷序列和中序遍歷序列,則重建二叉樹並返回。public class solution int in treenode root reconstructbinarytree p...

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

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