世界觀察:二叉樹遍歷_二叉樹
(資料圖片僅供參考)
生活中,很多人都不知道二叉樹遍歷_二叉樹,其實非常簡單,下面就是小編搜索到的二叉樹遍歷_二叉樹相關(guān)的一些知識,我們一起來學(xué)習(xí)下吧!
1、(1)二叉樹的前序遍歷建立二叉樹二叉樹在前序遍歷序列中,第一個元素始終是樹的根節(jié)點的值。在中序遍歷序列中,左子樹的節(jié)點值位于根節(jié)點值的左側(cè),右子樹的節(jié)點值位于根節(jié)點值的右側(cè)。遞歸求解:(1)如果前一次遍歷為空或中間遍歷為空或節(jié)點數(shù)小于等于0,則返回NULL。(2)創(chuàng)建根節(jié)點。前序遍歷的第一個數(shù)據(jù)是根節(jié)點的數(shù)據(jù)。通過尋找根節(jié)點在中序遍歷中的位置,可以分別知道左右子樹的前序和中序遍歷順序,重構(gòu)左右子樹。
2、在中序遍歷序列中,左子樹的節(jié)點值位于根節(jié)點的左側(cè),右子樹的節(jié)點值位于根節(jié)點的右側(cè)。在隨后的遍歷序列中,左子樹的節(jié)點的值位于右子樹的節(jié)點的值的左側(cè),右子樹的節(jié)點的值位于根節(jié)點的值的左側(cè)。
3、遞歸求解:(1)如果中序遍歷為空或者逆序遍歷為空或者節(jié)點數(shù)小于等于0,則返回NULL。(2)創(chuàng)建根節(jié)點。后序遍歷的最后一個數(shù)據(jù)是根節(jié)點的數(shù)據(jù)。通過尋找根節(jié)點在中序遍歷中的位置,可以分別知道左右子樹的中序和后序遍歷順序,重構(gòu)左右子樹。
4、(2)遍歷二叉樹: A .如果二叉樹為空,則空操作b .如果二叉樹不為空,則訪問根節(jié)點,遍歷前導(dǎo)中的左子樹,遍歷前導(dǎo)中的右子樹:a .如果二叉樹為空。b .如果二叉樹不為空,則中序遍歷左子樹和根節(jié)點,中序遍歷右子樹,后序遍歷根節(jié)點:a .如果二叉樹為空,則空操作b .如果二叉樹不為空,則后序遍歷左子樹,后序遍歷右子樹并訪問根節(jié)點。初始化隊列并將根節(jié)點推入隊列。當(dāng)隊列不為空時,執(zhí)行以下操作:彈出一個節(jié)點,訪問它,如果左或右子節(jié)點不為空,則將其推入隊列。之前按照書上的描述,是通過遞歸建立的二叉樹,然后輸入的時候發(fā)現(xiàn)是個死循環(huán)。我以為我的程序錯了,但是我沒有深刻理解二叉樹的定義。在程序中,輸入必須按正確的順序進(jìn)行。這里用了一個性質(zhì)二叉樹,即對于二叉樹有N個節(jié)點,有N-1個空域。這里如果輸入N個元素,必須有n 1 #才能完成迭代過程。比如ABCD # # # #可以完整的完成輸入,遞歸調(diào)用。
5、# include " stdio。h " # include "標(biāo)準(zhǔn)庫。h " include " cono。h " #定義element type char/* writer Liu */typedef struct node { char data;結(jié)構(gòu)節(jié)點*lc圖像;結(jié)構(gòu)節(jié)點* rchild(結(jié)構(gòu)化節(jié)點*存檔節(jié)點):結(jié)構(gòu)節(jié)點*父節(jié)點結(jié)構(gòu)化節(jié)點*父項:}BiTNode 、* bitree bitree create bitree(){ char ch;bitree t;scanf("% c,ch ");//get har();if(ch==" # ")t=null;/*這里的輸入要嚴(yán)格按照正確的順序才能結(jié)束。這里要用到二叉樹的一個性質(zhì),就是說對于有n個個節(jié)點的二叉樹,就有n 1號個空域,在這里即為如果你輸入了n個個元素,那么一定要有n 1號個#才會結(jié)束迭代過程/else /*例如1234###才能成功!*/{ t=(bitree)malloc(sizeof(bit node));t-data=ch;t-LC image=create bitree();t-archid=create bitree();}返回t;//返回根節(jié)點}//先序遍歷二叉樹 void preorder traverse(bit REE t){ if(t){ printf(% c,t-data);前序遍歷(t-lch圖像);前序?qū)Ь€(t-archild);} //中序遍歷二叉樹 void in transase(bit reet t){ if(t){ in transase(t-LC圖像)}:printf("% c,t-data ");諾梅爾特拉(t-archild);} //后序遍歷二叉樹 void郵政訂單遍歷(bit REE t){ if(t){郵政訂單遍歷(t-lcimage);郵政匯票(t-archild);printf("% c,t-data ");} } int main(){ bitree t;t=create bitree();前序遍歷(t);printf(" \ n ");無間隙遍歷(t);printf(" \ n ");郵政匯票(t);}
本文到此結(jié)束,希望對大家有所幫助。
關(guān)鍵詞: