輸入某二叉樹的前序遍歷和中序遍歷的結果,請重建出該二叉樹。假設輸入的前序遍歷和中序遍歷的結果中都不含重複的數字。例如輸入前序遍歷序列 和中序遍歷序列 ,則重建二叉樹並返回。
首先了解前序遍歷和中序遍歷的特點:前序遍歷是先遍歷根節點再遍歷左孩子再遍歷右孩子;中序遍歷是先遍歷左孩子再遍歷根節點再遍歷右孩子。
根據特點我們知道先序遍歷的第乙個元素為根節點,如果我們在中序遍歷中找到這個根節點,從而可以將中序遍歷分為左右兩個部分,左邊部分為左子樹的中序遍歷,右邊部分為右子樹的中序遍歷。同樣的我們可以將先序遍歷除第乙個元素以外的剩餘部分分為兩個部分,第乙個部分為左子樹的先序遍歷,第二個部分為右子樹的先序遍歷。
因此我們分別找到了左、右子樹的前序遍歷序列和中序遍歷序列,我們就可以用同樣的方法分別去構建左右子樹。
/**
* definition for binary tree
* public class treenode
* }*/public
class
solution
public treenode funre
(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;
}}
劍指offer4 重建二叉樹
給出前序遍歷和中序遍歷,重新構建二叉樹.重建二叉樹主要就是遞迴,每一次新增乙個結點進入二叉樹,保證遞迴的順序和前序遍歷順序一致就ok了,多以左子樹的遞迴在前面,右子樹的遞迴放在後面,和前序遍歷的順序一致,第一次遞迴新增前序遍歷陣列中的第乙個,第二次遞迴新增的是前序遍歷陣列中的第二個.第n個就是陣列中...
劍指offer 4 重建二叉樹
題目描述 輸入某二叉樹的前序遍歷和中序遍歷的結果,請重建出該二叉樹。假設輸入的前序遍歷和中序遍歷的結果中都不含重複的數字。例如輸入前序遍歷序列和中序遍歷序列,則重建二叉樹並返回。思路 中序序列中,節點左邊為左子樹,右邊為右子樹。前序第乙個為根節點 12 4 7 3 5 6 8 左 4 7 215 3...
劍指offer 4 重建二叉樹
輸入某二叉樹的前序遍歷和中序遍歷的結果,請重建出該二叉樹。假設輸入的前序遍歷和中序遍歷的結果中都不含重複的數字。例如輸入前序遍歷序列和中序遍歷序列,則重建二叉樹並返回。演算法設計思想 前序遍歷序列的第乙個元素為根結點的值,然後在中序遍歷序列中尋找根節點的值的位置 索引 從中序遍歷序列的起始位置到根結...