根據兩種不同遍歷結果重構二叉樹

2021-07-23 11:41:17 字數 1110 閱讀 1946

leetcode原題:題目1

題目2這裡假設給的遍歷都有中序遍歷,我們先根據先序遍歷或後序遍歷找到根結點的值,然後據此可判斷,在中序遍歷的結果向量中,在根節點之前的部分陣列組成它的左子樹,根節點之後組成它的右子數。採用深度遞迴dfs。

題1:已知中序和後序遍歷結果

/**

* definition for a binary tree node.

* struct treenode

* };

*/class solution

treenode* left=dfs(post-(inend-index)-1,instart,index-1,inorder,postorder);

treenode* right=dfs(post-1,index+1,inend,inorder,postorder);

root->left=left;

root->right=right;

return root;

}public:

treenode* buildtree(vector

& inorder, vector

& postorder)

};

題2:已知中序和前序遍歷結果

/**

* definition for a binary tree node.

* struct treenode

* };

*/class solution

treenode* left=dfs(prestart+1,instart,index-1,preorder,inorder);

treenode* right=dfs(prestart+index-instart+1,index+1,inend,preorder,inorder);

root->left=left;

root->right=right;

return root;

}public:

treenode* buildtree(vector

& preorder, vector

& inorder)

};

根據兩種二叉樹遍歷方式,求二叉樹方法

如何根據已知兩種遍歷的序列,求原始的二叉樹?並不是已知道任意兩個序列都可以還原二叉樹,只有知道先序中序以及中序和後序兩種型別的遍歷順序才能還原二叉樹。只知道先序和後序是還原不了原始的二叉樹的。1 已知道先序和中序遍歷,還原二叉樹。已知道二叉樹的先序遍歷為abcdefgh,中序遍歷為bdceafhg,...

(經典問題)根據兩種遍歷構建二叉樹

在劍指offer上刷到的,以前沒有好好地總結資料結構的知識,現在乾脆一併歸一下檔。利用兩種遍歷就可以確定一顆二叉數的確定形狀,但是已知的遍歷中必須有中序遍歷。也就是說,前序遍歷 中序遍歷或者後序遍歷 中序遍歷,就能確定樹。因為必須要利用中序遍歷來分割左子樹和右子樹。題意就是給出前序遍歷和中序遍歷,構...

根據二叉樹遍歷結果反推樹

已知前序 中序遍歷,求後序遍歷 例 前序遍歷 gdafemhz 中序遍歷 adefghmz 根據前序遍歷的特點,我們知道根結點為g 觀察中序遍歷adefghmz。其中root節點g左側的adef必然是root的左子樹,g右側的hmz必然是root的右子樹。觀察左子樹adef,左子樹的中的根節點必然是...