知道二叉樹的先序和中序遍歷,重建該二叉樹

2022-07-25 19:48:11 字數 1102 閱讀 7352

#include using

namespace

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...