根據前序遍歷序列和中序遍歷序列重建二叉樹

2021-07-05 03:35:25 字數 1307 閱讀 8632

題目描述

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

程式設計思路:

1.先求出根節點(前序序列第乙個元素)。

2.將根節點帶入到中序遍歷序列中求出左右子樹的中序遍歷序列。

3.通過左右子樹的中序序列元素集合帶入前序遍歷序列可以求出左右子樹的前序序列。

4.左右子樹的前序序列第乙個元素分別是根節點的左右兒子

5.求出了左右子樹的4種序列可以遞迴上述步驟

源**(c++):

/**

* definition for binary tree

* struct treenode

* };

*/class solution

//定義node節點並其求根節點;

int root = pre[0];

treenode* node = new treenode(root);

vector

::iterator it;

//1.求左右子樹的遍歷序列;

vector

preleft, preright, inleft, inright;

//(1).求根節點在中序遍歷序列中的位置;

vector

::iterator i;

for(it = in.begin(); it != in.end(); it++)

}//(2).求左右子樹的中序遍歷子串行;

int k = 0;

for(it = in.begin(); it != in.end(); it++)

else

if(k == 1)

else {}

if(it == i)

}//(3).求左右子樹的前序遍歷子串行;

k = 0;

vector

::iterator ite;

for(it = pre.begin()+1; it != pre.end(); it++)

}if(k == 0)

k = 0;

}//根據遍歷序列求出跟的左右節點;

node->left = reconstructbinarytree(preleft,inleft);

node->right = reconstructbinarytree(preright,inright);

//返回節點位址;

return node;

}};

如何根據前序遍歷序列和中序遍歷序列確定二叉樹

分段,每一段找根節點,就好,找root,有點遞迴的思路。例如 假設某二叉樹的先序遍歷序列是abdgcefh,中序遍歷序列是dgbaechf,畫出二叉樹,並給出其後序遍歷序列.以下面的例題為例進行講 已知一棵二叉樹的先序遍歷序列和中序遍歷序列分別是abdgcefh dgbaechf,求二叉樹及後序遍歷...

根據前序遍歷序列和中序遍歷序列構造二叉樹演算法

乙個前序遍歷序列和乙個中序遍歷序列可以確定一顆唯一的二叉樹。根據前序遍歷的特點,知前序序列 presequence 的首個元素 presequence 0 為二叉樹的根 root 然後在中序序列 insequence 中查詢此根 root 根據中序遍歷特點,知在查詢到的根 root 前邊的序列為根的...

根據前序遍歷和中序遍歷得出後序遍歷

首先要明確前序,中序和後序的遍歷順序 前序 父節點,左子節點,右子節點 中序 左子節點,父節點,右子節點 後序 左子節點,右子結點,父節點 明確之後,首先根據前序遍歷,確定整個二叉樹的根節點 前序的第乙個節點 再通過中序遍歷,可以直接根據根節點將整個二叉樹分為左右兩顆子樹.這時再逐步根據前序和中序順...