只要知道前序/後序+中序就可以還原二叉樹。
前序+中序
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 如上圖...