二叉樹的重構 前序 後序 中序還原二叉樹

2021-09-14 01:59:09 字數 1114 閱讀 4003

只要知道前序/後序+中序就可以還原二叉樹。

前序+中序

preorder:         gdafemhz

inorder:            adefghmz

通過前序我們可以找到根節點為g,之後在中序中我們中序遍歷的特性找到g的左子樹adef和右子樹mhz。之後在通過前序找到左子樹的根節點d,那麼左子樹的左子樹為a,左子樹的右子樹為ef。之後發現a空樹,那麼在同理通過前序找到左子樹的右子樹的根為f,左節點為e,之後同理就可以還原一棵樹了。

實現

void createtree(int *pr,int *in,int len,tree &t)

t=new bintree;

t->date=*pr;

int len1=0;

for(;len1lc); // 當前樹的根節點左邊的子樹

createtree(pr+len1+1,in+len1+1,len-(len1+1),t->rc); // 當前樹的根節點右邊的子樹

}

相關題目 l2-011 玩轉二叉樹

後序+中序

按照後序的性質最後乙個為根節點,之後為右子樹的根節點,和前序+中序的思路相同,就可以還原成樹了

實現

void createtree(int *in,int *po,int len,tree &t)

t=new bintree;

t->date=*po;

int len1=0;

for(;len1lc);

createtree(in+len1+1,po-1,len-len1-1,t->rc);

}

相關題目 l2-006 樹的遍歷

陣列實現版本待補充

如果二叉樹是真二叉樹,那麼前序+後序也可以還原

如下圖

前序中序和中序後序還原二叉樹

前序中序還原二叉樹 struct node creat int len,char str1,char str2 由先序序列和中序序列建立二叉樹 root lchild creat i,str1 1,str2 建立左子樹 root rchild creat len i 1,str1 i 1,str2 ...

根據前序 中序 後序遍歷還原二叉樹

參考 首先我們得知道概念 前序遍歷 先訪問當前節點,再訪問當前節點的左子樹,最後訪問當前節點的右子樹。對於二叉樹,深度遍歷與此同。規律 根在前 子樹在根後且左子樹比右子樹靠前,且第乙個就是根節點 中序遍歷 先訪問當前節點的左子樹,然後訪問當前節點,最後是當前節點的右子樹,二叉樹,中序遍歷會得到資料公...

二叉樹遍歷(前序,中序,後序

二叉樹的遍歷有三種方式,如下 1 前序遍歷 dlr 首先訪問根結點,然後遍歷左子樹,最後遍歷右子樹。簡記根 左 右。2 中序遍歷 ldr 首先遍歷左子樹,然後訪問根結點,最後遍歷右子樹。簡記左 根 右。3 後序遍歷 lrd 首先遍歷左子樹,然後遍歷右子樹,最後訪問根結點。簡記左 右 根。例1 如上圖...