根據前序與中序序列重構二叉樹

2021-10-05 12:32:21 字數 1022 閱讀 3385

根據前序與中序序列重構二叉樹

題目描述

輸入某二叉樹的前序遍歷和中序遍歷的結果,請重建出該二叉樹。假設輸入的前序遍歷和中序遍歷的結果中都不含重複的數字。例如輸入前序遍歷序列和中序遍歷序列,則重建二叉樹並返回。

分析:重構二叉樹的條件是已知中序序列以及前序序列和後序序列的其中乙個。

該題中,已知前序序列和中序序列。

首先考慮這兩種序列的遍歷形式:

前序序列:先遍歷根節點,然後左子樹,然後右子樹

中序序列:先遍歷左子樹,然後根節點,然後右子樹

因此,我們已知前序序列,則前序序列的第乙個元素是根節點內容。然後根據該節點的值,在中序序列中找到該值的位置,則可以根據中序序列確定出左子樹和右子樹的元素集合。根據由中序序列得到的左子樹和右子樹的中序遍歷,可以在前序序列中找到左子樹和右子樹的前序遍歷序列。因此,很容易考慮遞迴即可。

/**

* definition for binary tree

* struct treenode

* };

*/class solution

//st表示中序遍歷根的位置

for(

int i=

0;i)for

(int i=st+

1;isize()

;i++

)for

(int i=

1;i<=vin_before.

size()

;i++

)for

(int i=pre_before.

size()

+1;isize()

;i++)

root->left=

reconstructbinarytree

(pre_before,vin_before)

; root->right=

reconstructbinarytree

(pre_after,vin_after)

;return root;}}

;

重構二叉樹 根據前序和中序

重構二叉樹.cpp 定義控制台應用程式的入口點。include stdafx.h include iostream include stdlib.h include stdio.h include string.h using namespace std int i,j struct binaryn...

二叉樹的重構(知道前序中序)

前序遍歷 gdafemhz 中序遍歷 adefghmz 後序遍歷 aefdhzmg 現在,假設僅僅知道前序和中序遍歷,如何求後序遍歷呢?比如,已知一棵樹 的前序遍歷是 gdafemhz 而中序遍歷是 adefghmz 應該如何求後續遍歷?第一步,root最簡單,前序遍歷的第一節點g就是root。然是...

二叉樹的重構 前序 後序 中序還原二叉樹

只要知道前序 後序 中序就可以還原二叉樹。前序 中序 preorder gdafemhz inorder adefghmz 通過前序我們可以找到根節點為g,之後在中序中我們中序遍歷的特性找到g的左子樹adef和右子樹mhz。之後在通過前序找到左子樹的根節點d,那麼左子樹的左子樹為a,左子樹的右子樹為...