題目描述
輸入某二叉樹的前序遍歷和中序遍歷的結果,請重建出該二叉樹。假設輸入的前序遍歷和中序遍歷的結果中都不含重複的數字。例如輸入前序遍歷序列和中序遍歷序列,則重建二叉樹並返回。
分析先序遍歷的第乙個數肯定是根節點,然後在中序遍歷中這個數左邊就是根節點的左子樹,右邊的數就是右子數,依次,考慮先序遍歷的第二個數,在中序遍歷的位置,左邊就是這個節點的左子樹,右邊就是右子數,依次類推。具體理解參考下圖
前序遍歷(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...