上篇博客介紹了構建一棵二叉樹,可是並無介紹如何遍歷二叉樹,一下,咱們只介紹3三種遍歷二叉樹的形式,java
分別是,前序遍歷,中序遍歷,後序遍歷,由於我也是學習階段,不免會有解釋不清,或者理解有誤的,歡迎指正node
----------------------------------我是分割線------------------------------------post
咱們先定義一棵普通的二叉樹,以下圖學習
咱們先說前序遍歷吧!
前序遍歷:經過遞歸進行遍歷,若是二叉樹爲空,則操做返回,若是非空,不然從根結點開始,而後遍歷左子樹完左子樹,在遍歷右子樹
前序遍歷的結果是: ABDGHEICFJK 爲何會遍歷出這種結果,請看上面對前序遍歷的描述,先遍歷左邊,而後在遍歷右邊spa
JAVA代碼以下:code
//前序遍歷 public static void preTraversal(Node node){ if(null!=node){ System.out.println(node.getData()); preTraversal(node.getLeft()); preTraversal(node.getRight()); return; } }
而後是中序遍歷!
中序遍歷:經過遞歸進行遍歷,若是二叉樹爲空,則操做返回,若是非空,不然從根結點開始,中序遍歷根結點的左子樹,而後訪問根結點,最後中序遍歷右子樹
前序遍歷的結果是: GDHBEIACJFK 爲何會遍歷出這種結果,請看上面對中序遍歷的描述,先遍歷左邊,而後訪問根結點,而後在遍歷右邊遞歸
JAVA代碼以下:get
//中序遍歷 public static void inOrder(Node node){ if(null!=node){ inOrder(node.getLeft()); System.out.println(node.getData()); inOrder(node.getRight()); return; } }
最後是後序遍歷!
後序遍歷:經過遞歸進行遍歷,若是二叉樹爲空,則操做返回,若是非空,不然從左到右,先葉子後結點的方式遍歷訪問左右子樹,最後訪問根結點
前序遍歷的結果是: GHDIEBJKFCA 爲何會遍歷出這種結果,請看上面對中序遍歷的描述,從左到右,先葉子,後結點博客
JAVA代碼以下:class
//後序遍歷 public static void postOrder(Node node){ if(null!=node){ postOrder(node.getLeft()); postOrder(node.getRight()); System.out.println(node.getData()); return; } }
以上就是二叉樹的其中三種遍歷方式,其中的差別性就在於遞歸調用的時候,對某個結點進行操做,
例如前序遍歷,每次遞歸調用,都是先打印結點的data信息,而後是訪問左葉子結點信息,又是打印結點信息,直到沒有左葉子的時候,返回上層結點,而後調用右葉子,如此遞歸,就會出現前序遍歷的結果
中序跟後序跟前序原理差很少,不一樣的在於何時打印結點信息而已,就給各位看官本身看了
到這,文章就結束了!
以上,均爲本人我的理解,比較簡單的理解,或許跟各位看官理解的有出入,歡迎指正交流
歡迎轉載,請註明出處跟做者,謝謝!