圖解二叉樹遍歷(遞歸調用)


常見的遍歷次序:(1)先序遍歷;(2)中序遍歷;(3)后序遍歷。

一、先序遍歷

先序遍歷:(1)訪問根節點;(2)采用先序遞歸遍歷左子樹;(3)采用先序遞歸遍歷右子樹;

(注:每個節點的分支都遵循上述的訪問順序,體現“遞歸調用”)

先序遍歷結果:A BDFE CGHI

思維過程:(1)先訪問根節點A,

(2)A分為左右兩個子樹,因為是遞歸調用,所以左子樹也遵循“先根節點-再左-再右”的順序,所以訪問B節點,

(3)然后訪問D節點,

(4)訪問F節點的時候有分支,同樣遵循“先根節點-再左--再右”的順序,

(5)訪問E節點,此時左邊的大的子樹已經訪問完畢,

(6)然后遵循最后訪問右子樹的順序,訪問右邊大的子樹,右邊大子樹同樣先訪問根節點C,

(7)訪問左子樹G,

(8)因為G的左子樹沒有,所以接下倆訪問G的右子樹H,

(9)最后訪問C的右子樹I

 

 1 Status PreOrderTraverse(BiTree T,Status(* Visit)(TELemType e)){
 2 //采用二叉鏈表存儲結構,Visit是對數據元素操作的應用函數
 3 //先序遍歷二叉樹的遞歸算法,對每個數據元素調用函數Visit。
 4 //調用實例PreOrderTraverse(T,PrintElement);
 5 if(T){
 6    if(Visit(T->data))
 7     if(PreOrderTraverse(T->lchild.Visit))
 8       if(PreOrderTraverse(T->rchild.Visit))  return ok;
 9   return error;
10 }
11 else
12   return ok;
13

二、中序遍歷

 

中序遍歷:(1)采用中序遍歷左子樹;(2)訪問根節點;(3)采用中序遍歷右子樹

中序遍歷結果:DBEF      GHCI

三、后序遍歷

 后序遍歷:(1)采用后序遞歸遍歷左子樹;(2)采用后序遞歸遍歷右子樹;(3)訪問根節點;

后序遍歷的結果:DEFB  HGIC   A

 

小結:三種方法遍歷過程中經過節點的路線一樣;只是訪問各個節點的時機不同。

遞歸算法主要使用堆棧來實現。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM