C 基於先序 中序遍歷結果重建二叉樹的方法

2022-10-03 15:09:16 字數 1202 閱讀 3623

題目:

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

實現**:

#include

#include

#include

using namespace std;

struct treenode

};//建立二叉樹程式設計客棧演算法

treenode* reconstructbinarytree(vector pre, vector mid)

} for (int i = 0; i < nodesize; i++)

else if (i > rootpos)

} phead->left = reconstructbinarytree(leftpre, leftmid);

phead->right = reconstructbinarytree(rightpre, rightmid);

return phead;

}//列印後續遍歷順序

void printno root)

printnodevalue(root->left);

printnodevalue(root->right);

cout << root->val<< " ";

}int main()

; vector midvec;

cout << "先序遍歷序列為 1 2 4 5 3 6" << endl;

cout << "中序遍歷序列為 4 2 5 1 6 3" << endl;

treenode* root = reconstructbinarytree(prevec, midvec);

cout << "後續遍歷序列為 ";

printnodevalue(root);

cout << endl;

system("pause");}/*

測試二叉樹形狀:

12程式設計客棧 3

4 5 6

*/執行結果:

先序遍歷序列為 1 2 4 5 3 6

中序遍歷序列為 4 2 5 1 6 3

後續遍歷序列為 4 5 2 6 3 1

請按任意鍵繼續. . .

本文標題: c++基於先序、中序遍歷結果重建二叉樹的方法

本文位址:

先序 中序遍歷重建二叉樹

假設已知先序序列為pre1,pre2,pre3 pren,中序序列為in1,in2,in3,inn,如圖所示,那麼由先序序列的性質可知,先序序列的第乙個元素pre1是當前二叉樹的根節點,再由中序序列的性質可知,當前二叉樹的根節點將中序序列劃分為左子樹和右子樹。因此,要做的就是在中序序列中找到某個結點...

根據先序遍歷和中序遍歷的結果重建二叉樹。

二叉樹是由n個 n 0 個節點所構成的有限集合。當n 0時二叉樹為空樹 當n 0時,二叉樹滿足以下條件 二叉樹的每個節點至多有兩個子節點 二叉樹對於子節點有嚴格的左右之分,即為有序的。層次遍歷 按層從左到右訪問節點 先序遍歷dlr 訪問根節點 先序遍歷左子樹 先序遍歷右子樹 中序遍歷ldr 中序遍歷...

劍指offer 先序 中序遍歷結果重建二叉樹

題目 輸入某二叉樹的前序遍歷和中序遍歷的結果,請重建出該二叉樹。假設輸入的前序遍歷和中序遍歷的結果中都不含重複的數字。例如輸入前序遍歷序列和中序遍歷序列,則重建二叉樹並返回。include include include using namespace std struct treenode 建立二...