C 根據 前序 中序遍歷輸出後序遍歷

2022-02-24 11:14:25 字數 1025 閱讀 4650

#include #include 

void printt(char pred,int pre_start,int pre_end,char inod,int in_start,int

in_end);

intmain()

void printt(char pred,int pre_start,int pre_end,char inod,int in_start,int

in_end)

//尋找該根在中序遍歷中的位置 這樣才能確定該根的左右子樹

int leftno=0;//

統計左子樹總節點數

int inindex=in_start;//

用於記錄root在中序遍歷中的位置

while(inod[inindex]!=root)

leftno=inindex-in_start;

//左子樹

//上面已經求出了左子樹的節點個數 那麼pred中左子樹的範圍就很好確定了

printt(pred,pre_start+1,pre_start+leftno,inod,in_start,inindex-1

);

//右子樹

printt(pred,pre_start+leftno+1,pre_end,inod,inindex+1

,in_end);

printf(

"%c,

",root);}/*

關於非法子樹

假如某乙個子樹 沒有左邊孩子 或者沒有右邊孩子

假如這一層的沒有左孩子 那麼在中序遍歷中in_start==inindex

那麼本次算出來的in_start 會大於 inindex-1

進入本層 左子樹 後 左子樹接收到的in_start就大於 in_end 屬於非法子樹

假如這一層沒有右孩子

那麼在中序遍歷中 inindex==in_end

進入本層的 右子樹這一層後 接收到的in_start>in_end 屬於非法子樹

*/

根據前序遍歷和中序遍歷得出後序遍歷

首先要明確前序,中序和後序的遍歷順序 前序 父節點,左子節點,右子節點 中序 左子節點,父節點,右子節點 後序 左子節點,右子結點,父節點 明確之後,首先根據前序遍歷,確定整個二叉樹的根節點 前序的第乙個節點 再通過中序遍歷,可以直接根據根節點將整個二叉樹分為左右兩顆子樹.這時再逐步根據前序和中序順...

前序遍歷 中序遍歷 後序遍歷

只要是搞計算機的,對資料結構中二叉樹遍歷都不陌生,但是如果用到的機會不多那麼就會慢慢淡忘,溫故而之新才是最好的學習方式,現在就重新溫習一下這方面的知識。首先我想先改變這幾個遍歷的名字 前根序遍歷,中根序遍歷,後根序遍歷 前中後本來就是相對於根結點來說的,少乙個字會產生很多不必要的誤解。1.前根序遍歷...

前序遍歷 中序遍歷 後序遍歷

遍歷是針對根節點的 前序遍歷順序 根節點 左子樹 右子樹 中序遍歷順序 左子樹 根節點 右子樹 後序遍歷順序 左子樹 右子樹 根節點 深入一點去理解這個排序順序是這樣的 前序遍歷 首先訪問根結點,然後遍歷左子樹,最後遍歷右子樹。在遍歷左 右子樹時,仍然先訪問根結點,然後遍歷左子樹,最後遍歷右子樹。中...