問題描述:根據前序遍歷結果和中序遍歷結果,重構二叉樹。
1)前序遍歷結果的特點:假設當前的遍歷結果是完整的樹節點集合。那麼第乙個節點就是該樹的根節點,並且其後面的節點集合中,前半部分是其左子樹的節點集合,後半部分是其右子樹的節點集合。
2)中序遍歷結果的特點:如果當前節點是當前樹的根節點,那麼該節點左邊的節點集合是樹的左子樹節點的集合,該節點右邊的節點集合是樹的右子樹節點集合。
3)有了1)和
2)的知識之後,就比較便於分析。
首先,可以通過前序結果找到當前樹的根節點(即第乙個元素)。其次,在中序結果中定位到根節點的位置,從而將中序結果劃分為左子樹節點集合、根節點和右子樹節點集合,並且能夠得到左子樹和右子樹的節點數目,進一步將先序遍歷結果劃分為根節點、左子樹節點集合和右子樹節點集合。最後,通過遞迴方法分別得到左子樹節點集合和右子樹節點集合的根節點。
示例測試**:
注:本節的樹結構在上篇部落格中。
重構二叉樹
重構二叉樹的思路主要是首先在前序 後序 序列中找到根結點,然後在中序序列中找到根結點所在的位置,該結點將整個序列分成兩個部分,前一部分為根結點的左子樹元素,後一部分為根結點的右子樹元素。再遞迴的生成左子樹和右子樹即可。1.通過前序,中序序列重構二叉樹 treenode buildtree vecto...
二叉樹重構
先驗知識 前序 第乙個數就是根節點 中序 根節點位於中間,剛好將其左右子樹分開 運用方法 遞迴 找到根節點,將其數值放入value,遞迴的分別根據左右子樹進行二叉樹重建 根據函式已有的介面,因此,需要將左 右 子樹的前序,中序分別用vector進行賦值 最後遞迴的對左右進行重建,方法一樣 關鍵 易錯...
重構二叉樹
題目描述 來自 劍指offer 輸入某二樹的前序遍歷和中序遍歷的結果,請重構該二叉樹。假設前序遍歷和中序遍歷的結果中不含重複數字。例如前序遍歷,中序遍歷 請重構二叉樹。思路 在前序遍歷中,第乙個元素是根元素即 1 是 根元素,而在在中序遍歷中 跟元素在中間,根元素之前的元素在左子樹而右邊的元素在右子...