思路:
根據前序遍歷,我們可以知道二叉樹的根節點,根據這個跟節點我們可以在中序遍歷中找到該節點的位置k,小於k的節點均為該節點的左子樹,大於k的節點均為該節點的右子樹。
這樣的話,我們就很容易想到遞迴的方式。每次遞迴都返回該子樹的根節點。
public
class
solution
public treenode rebuildtree
(int pre,
int startpre,
int endpre,
int in,
int startin,
int endin)
int rootindex =
getrootindex
(pre[startpre]
,in,startin,endin)
; treenode root =
newtreenode
(pre[startpre]);
root.left =
rebuildtree
(pre,startpre+
1,startpre+rootindex-startin,in,startin,rootindex-1)
; root.right =
rebuildtree
(pre,startpre+rootindex-startin+
1,endpre,in,rootindex+
1,endin)
;return root;
}public
intgetrootindex
(int target,
int in,
int startin,
int endin)
}return-1
;}}
重建二叉樹,根據前序中序遍歷構建二叉樹
輸入某二叉樹的前序遍歷和中序遍歷的結果,請重建出該二叉樹。假設輸入的前序遍歷和中序遍歷的結果中都不含重複的數字。例如輸入前序遍歷序列和中序遍歷序列,則重建二叉樹並返回。前序遍歷 根左右 中序遍歷 左根右 根據前序遍歷我們可以知道根節點,根據中序遍歷我們可以知道根節點的左右子樹結點有哪些。如 前序 中...
07 二叉樹 根據前序和中序遍歷重建二叉樹
問題 輸入某二叉樹的前序遍歷和中序遍歷的結果,請重建該二叉樹。假設輸入的前序遍歷和中序遍歷的結果中都不含重複的數字。分析 1 先根據前序遍歷的第乙個節點root找到分界點i 2 將前序遍歷陣列和中序遍歷陣列按照分界點進行劃分 3 遞迴 實現 public treenode buildtree int...
重建二叉樹 根據前序遍歷和中序遍歷構建二叉樹
輸入某二叉樹的前序遍歷和中序遍歷的結果,請重建出該二叉樹。假設輸入的前序遍歷和中序遍歷的結果中都不含重複的數字。例如輸入前序遍歷序列和中序遍歷序列,則重建二叉樹並返回。思路 1.前序遍歷的第乙個節點一定是根結點。前序遍歷的乙個節點要麼是相鄰前乙個節點的左子樹 右子樹或者更靠近前面節點的右子樹。如何確...