題目描述:
輸入某二叉樹的前序遍歷和中序遍歷的結果,請重建出該二叉樹。假設輸入的前序遍歷和中序遍歷的結果中都不含重複的數字。例如輸入前序遍歷序列和中序遍歷序列,則重建二叉樹並返回。
方案:在二叉樹的前序遍歷序列中,第乙個數字總是樹的根節點的值;
在二叉樹的中序遍歷序列中,根節點的值在序列的中間,根節點左側的值為左子樹的節點值,根節點右側的值為右子樹的節點值。
eg:前序遍歷序列:,中序遍歷序列
方案1與方案2只是遞迴結束條件不同;如下**表示的是左子樹的遞迴結束步驟。
方案1:
istart_pre
end_pre
start_vin
end_vin05
0521
2011
2200
0320
-1方案2:
start_pre
end_pre
start_vin
end_vin
left_tmp
left_length05
0522
1201
1122
0000
/*** definition for binary tree
* struct treenode
* };
*/方案1:
class solution
for (int i = start_vin;i<=end_vin; i++)
}return root;
}方案2:
class solution
int left_tmp = 0;
for (int i = start_vin;i <= end_vin; i++)
}int left_length = left_tmp - start_vin;
if(left_length >0)
if(left_length < end_pre - start_pre)
return root;
}treenode* reconstructbinarytree(vectorpre, vectorvin)
return constructcore(pre, vin, 0, pre.size() - 1, 0, vin.size() - 1);}};
《劍指offer》p62
劍指offer程式設計題《重建二叉樹》
輸入某二叉樹的前序遍歷和中序遍歷的結果,請重建出該二叉樹。假設輸入的前序遍歷和中序遍歷的結果中都不含重複的數字。例如輸入前序遍歷序列和中序遍歷序列,則重建二叉樹並返回。我們都知道,通過前序遍歷和中序遍歷或後序遍歷和中序遍歷可以唯一確定一棵二叉樹。前序 根 左 右 中序 左 根 右 後序 左 右 根 ...
劍指offer程式設計題 重建二叉樹
輸入某二叉樹的前序遍歷和中序遍歷的結果,請重建出該二叉樹。假設輸入的前序遍歷和中序遍歷的結果中都不含重複的數字。例如輸入前序遍歷序列和中序遍歷序列,則重建二叉樹並返回。這道題目是一道非常經典的題目,這裡可以用乙個hash表存下中序遍歷的value的index,可以快速找到index definiti...
劍指Offer 程式設計題 重建二叉樹
輸入某二叉樹的前序遍歷和中序遍歷的結果,請重建出該二叉樹。假設輸入的前序遍歷和中序遍歷的結果中都不含重複的數字。例如輸入前序遍歷序列和中序遍歷序列,則重建二叉樹並返回。二叉樹 在電腦科學中,二叉樹是每個結點最多有兩個子樹的樹結構。通常子樹被稱作 左子樹 left subtree 和 右子樹 righ...