輸入某二叉樹的前序遍歷和中序遍歷的結果,請重建該二叉樹。假設輸入的前序遍歷和中序遍歷的結果中都不含重複的數字。
例如,給出
前序遍歷 preorder = [3,9,20,15,7]
中序遍歷 inorder = [9,3,15,20,7]
返回如下的二叉樹:
3/ \
9 20
/ \
15 7
限制:0 <= 節點個數 <= 5000
解:樹一般都用遞迴的方法,這道題解題的關鍵是找到根節點在前序和中序的位置及關係
/** * definition for a binary tree node.
* struct treenode
* }; */
class
solution
treenode *root=new treenode(preorder[0
]);
//前序陣列中去掉根節點,中序陣列中根節點的下標,在前序節點中此下標前的都是根節點的左子樹
vector left_pre(preorder.begin()+1,preorder.begin()+i_medpos+1
); vector
right_pre(preorder.begin()+i_medpos+1
,preorder.end());
vector
left_in(inorder.begin(),inorder.begin()+i_medpos);
//中序陣列中去掉根節點
vector right_in(inorder.begin()+i_medpos+1
,inorder.end());
root->left=buildtree(left_pre,left_in);
root->right=buildtree(right_pre,right_in);
return
root;
}};
07 重建二叉樹
題目描述 輸入某二叉樹的前序遍歷和中序遍歷的結果,請重建該二叉樹。假設輸入的前序遍歷和中序遍歷的結果中都不含重複的數字。示例 前序遍歷 preorder 3 9,20 15,7 中序遍歷 inorder 9 3,15 20,7 返回如下的二叉樹 3 920 157 definition for a ...
07 重建二叉樹
利用python陣列的index函式來定位根節點在inorder陣列中的位置 index inorder.index root.val preorder陣列不需要進行切片操作,遞迴終止條件主要靠 前兩行中的not inorder來終止。root.left self.buildtree preorde...
演算法07(重建二叉樹)
輸入某二叉樹的前序遍歷和中序遍歷的結果,請重建該二叉樹。假設輸入的前序遍歷和中序遍歷的結果中都不含重複的數字。例如,給出 前序遍歷 preorder 3,9,20,15,7 中序遍歷 inorder 9,3,15,20,7 返回如下的二叉樹 3 9 20 15 7 以下是用遞迴寫出的方法,使用了時間...