#include usingnamespace
std;
struct
node;
//給定一棵二叉樹的先序遍歷序列和中序遍歷序列,重建這棵二叉樹
char pre = ; //
先序遍歷序列
char
in=; //
中序遍歷序列
//當前先序序列區間為[prel, prer],中間序列區間為[inl, inr],返回根節點位址
node* create(int prel, int prer, int inl, int
inr)
node* root = new node; //
新建乙個新節點,用來存放當前二叉樹的根節點
root->data = pre[prel]; //
新節點的資料域為根節點的值
intk;
for(k = inl; k <= inr; k++)
}int numleft = k - inl; //
左子樹的結點個數
//左子樹的先序區間為[prel+1, prel+numleft],中序區間為[inl, k-1]
//返回左子樹的根節點位址,賦值給root的左指標
root->lchild = create(prel+1, prel+numleft, inl, k-1
);
//右子樹的先序區間為[prel+numleft+1, prer],中序區間為[k+1, inr]
//返回右子樹的根節點位址,賦值給root的右指標
root->rchild = create(prel+numleft+1, prer, k+1
, inr);
return
root;
}void preorder(node* root)
//訪問根節點root,例如將其資料域輸出
printf("
%c\n
", root->data);
preorder(root->lchild);
preorder(root->rchild);
}int
main()
先序 中序遍歷重建二叉樹
假設已知先序序列為pre1,pre2,pre3 pren,中序序列為in1,in2,in3,inn,如圖所示,那麼由先序序列的性質可知,先序序列的第乙個元素pre1是當前二叉樹的根節點,再由中序序列的性質可知,當前二叉樹的根節點將中序序列劃分為左子樹和右子樹。因此,要做的就是在中序序列中找到某個結點...
已知中序遍歷和先序遍歷重建二叉樹
main.cpp constructbinarytree created by bazinga on 2017 3 12.根據前序遍歷和中序遍歷求二叉樹的結構 已知前序遍歷的第乙個值為根節點 而根節點在中序遍歷中的位置就能確定他的左右子樹。然後對區分開的左右子樹進行遞迴。include includ...
先序中序重建二叉樹
includeusing namespace std vectorpre,in int p typedef struct node vectorpost int rec int l,int r 通過前序和後序得到樹 int main for int i 0 i tem in.push back te...