t7.輸入某二叉樹的前序遍歷和中序遍歷的結果,請重建出該二叉樹。假設輸入的前序遍歷和中序遍歷的結果中都不含重複的數字。例如輸入前序遍歷序列和中序遍歷序列,則重建二叉樹並返回。
解題思路:
1.找出二叉樹的根節點
2.構建左子樹----->找出該左子樹的根節點,構建該左字樹的左子樹,構建該左子樹的右子樹…直到序列中沒有左子樹的序列
3.構建右子樹----->找出該右子樹的根節點,構建該右字樹的左子樹,構建該右子樹的右子樹…直到序列中沒有右子樹的序列
注:我們的目的就是要得到每個節點的值,也就是當前的根節點,直到該根節點沒有左右子樹為止
第一次
參考/**
* definition for binary tree
* struct treenode
* };
*/class
solution
}//vector::iterator index = find(inorder.begin(),inorder.end(),preorder[0]);此法不通
//將左子樹的前序和中序分別存入兩個vector中
for(
int i=
0; i ++i)
//將右子樹的前序和中序分別存入兩個vector中
for(
int i = mid +
1; i ++i)
//將左右子樹連線在根節點上,並進行遞迴實現
root-
>left =
reconstructbinarytree
(left_pre , left_in)
; root-
>right =
reconstructbinarytree
(right_pre , right_in)
;return root;
//最裡層的root為preorder[0];}}
;
/**
* definition for binary tree
* struct treenode
* };
*//*分析:先拿著前序的根,去中序中陣列中,找到以這個根為一棵樹的左右子樹,
然後將左子樹的前序、中序找出來存在兩個vector中,去構建左子樹;將右子樹的前序、
中序存在兩個vector中,構建右子樹,然後鏈在當前根的左右兩邊。
(以上過程是遞迴的,直到中序的vector中元素是0個了,即返回乙個空結點給上一層,否則就返回當前根結點)
*/class
solution
}//將當前樹左子樹的前序、中序放到對應的vector中
for(
int i =
0;i < mid; i++
)//將當前樹右子樹的前序、中序放到對應的vector中
for(
int i = mid +
1;i < len; i++
)//將左子樹、右子樹,掛在當前樹兩邊(遞迴)
root-
>left=
reconstructbinarytree
(left_pre,left_vin)
; root-
>right=
reconstructbinarytree
(right_pre,right_vin)
;return root;}}
;
面試題7 重建二叉樹
對vector使用指標 include include include using namespace std int main vector seq 3 vector curr 0 for int j 0 j 3 j getchar struct treenode struct listnode ...
面試題7 重建二叉樹
一 題目 輸入某二叉樹的前序遍歷和中序遍歷的結果,請重建出該二叉樹。假設輸入的前序遍歷和中序遍歷的結果中都不含重複的數字。例如輸入前序遍歷序列和中序遍歷序列,則重建出圖2.6所示的二叉樹並輸出它的頭結點。二 關鍵 根據前序找根節點,從而在中序中找到左子樹對應的序列,右子樹對應的序列。三 解釋 四 i...
面試題7 重建二叉樹
面試題7 重建二叉樹 題目 輸入某二叉樹的前序遍歷和中序遍歷的結果,請重建出該二叉樹。假設輸 入的前序遍歷和中序遍歷的結果中都不含重複的數字。例如輸入前序遍歷序列和中序遍歷序列,則重建出 圖所示的二叉樹並輸出它的頭結點。假裝有圖.jpg 1 2 3 4 5 6 7 8 在preorder inord...