劍指offer之重構二叉樹

2021-08-04 02:22:45 字數 747 閱讀 7591

題目描述

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

分析先序遍歷的第乙個數肯定是根節點,然後在中序遍歷中這個數左邊就是根節點的左子樹,右邊的數就是右子數,依次,考慮先序遍歷的第二個數,在中序遍歷的位置,左邊就是這個節點的左子樹,右邊就是右子數,依次類推。具體理解參考下圖

前序遍歷(1,2,4,7,3,5,6,8)

中序遍歷(4,7,2,1,5,3,8,6)

後序遍歷(7,4,2,5,8,6,3,1)

(從每個節點的a位置遍歷就是先序遍歷,從b位置就是中序遍歷,從c位置就是後後序遍歷。知道前中可以求後,知道中後可以求前。)

二叉樹的結點結構

class treenode 

}

知道前中,還原二叉樹的**

public

class

solution

private treenode reconstructbinarytree(int pre,int startpre,int endpre,int in,int startin,int endin)

return root;}}

劍指offer 重構二叉樹

輸入某二叉樹的前序遍歷和中序遍歷的結果,請重建出該二叉樹。假設輸入的前序遍歷和中序遍歷的結果中都不含重複的數字。例如輸入前序遍歷序列和中序遍歷序列,則重建二叉樹並返回。1.前序遍歷 前序遍歷的規則 先根節點,後左子樹,再右子樹 2.中序遍歷 中序遍歷的規則 先左子樹,後根節點,再右子樹 3.求重構二...

劍指Offer 重構二叉樹

題目 輸入某二叉樹的前序遍歷和中序遍歷的結果,請重建出該二叉樹。假設輸入的前序遍歷和中序遍歷的結果中都不含重複的數字。例如輸入前序遍歷序列和中序遍歷序列,則重建出如下圖所示的二叉樹並輸出它的頭結點。在二叉樹的前序遍歷序列中,第乙個數字總是樹的根結點的值。但在中序遍歷序列中,根結點的值在序列的中間,左...

劍指Offer 重構二叉樹

給定二叉樹的先序遍歷和中序遍歷 重新生成二叉樹 public class reconstructbinarytree public treenode reconstructbinarytree int pre int in 遞迴得到先序遍歷起止點為prestart和preend,中序遍歷起止點為in...