題目:
輸入某二叉樹的前序遍歷和中序遍歷的結果,請重建出該二叉樹。假設輸入的前序遍歷和中序遍歷的結果中都不含重複的數字。例如輸入前序遍歷序列和中序遍歷序列,則重建二叉樹並返回。
實現**:
#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 建立二...