JAVA實現二叉樹的前 中 後序遍歷

2021-07-24 03:00:00 字數 1887 閱讀 4408

二叉樹的遍歷有三種形式:前序遍歷、中序遍歷、後序遍歷,三種遍歷的規則分別如下:

1)前序遍歷:先遍歷根節點,然後遍歷左子節點,最後遍歷右子節點,簡記為「根-左-右」;

2)中序遍歷:先遍歷左子節點,然後遍歷根節點,最後遍歷右子節點,簡記為「左-根-右」;

3)後序遍歷:先遍歷左子節點,然後遍歷右子節點,最後遍歷根節點,簡記為「左-右-根」;

如果記性不好的朋友,總是記錯,可以這麼理解,前、中、後指的都是根的遍歷順序,然後無論何種遍歷,左節點都比右節點優先遍歷~

其實這都是大一時候學習的東西了,想想自己大一的時候還是比較墮落,連這個都沒親手實現過,那個時候遇到了困難就容易滋生恐懼,導致現在對資料結構演算法都還心存陰影。這是乙個不可以原諒的錯誤!回不到過去,只是在現在的時間加倍的補回來。只有與惡龍纏鬥才能享受斬殺其瞬間的快感,只有直面自己內心的深淵,才能夠找到光明。沒有困難是克服不了的!

話不多說,開始上**。我們先嘗試用遞迴實現:

/**

* 定義節點類

* @author keo.zhao

* */

public class treenode

public void setdata(t data)

public treenodegetleft()

public void setleft(treenodeleft)

public treenodegetright()

public void setright(treenoderight)

public treenode(t data, treenodeleft, treenoderight)

}

然後我們定義一顆二叉樹,其中包含了遍歷的方法:

/**

* 二叉樹定義類

* @author keo.zhao

* * @param */

public class bintree

public treenodegetroot()

public void setroot(treenoderoot)

/*** 遞迴先序遍歷

*/public void preorder(treenoderoot)

} /**

* 遞迴中序遍歷

*/public void midorder(treenoderoot)

} /**

* 遞迴後序遍歷

*/public void afterorder(treenoderoot)

}}

遞迴的思想比較簡單,**也比較簡潔,但是實際開發中最好還是不要用遞迴。所以我們可以嘗試,用迭代的思想去實現。

這裡用到了stack,棧是vector的乙個子類,它實現了乙個標準的後進先出的棧。

堆疊只定義了預設建構函式,用來建立乙個空棧。 堆疊除了包括由vector定義的所有方法,也定義了自己的一些方法。

在使用迭代的方式遍歷的過程中,需要維護乙個棧用來儲存遍歷的節點資訊,相應**如下所示:

/**

* 非遞迴的前序遍歷實現

* @param root

*/public void iterativepreorder(treenoderoot)

stack> stack = new stack>();

stack.push(root);

while(!stack.isempty())

treenodep= stack.pop();

if(!stack.isempty())

}

二叉樹的前中後序遍歷

秋招記錄 對一棵二叉樹進行遍歷,我們可以採取3種順序進行遍歷,分別是前序遍歷 中序遍歷和後序遍歷。這三種方式是以訪問父節點的順序來進行命名的。假設父節點是n,左節點是l,右節點是r,那麼對應的訪問遍歷順序如下 前序遍歷 中左右 n l r 中序遍歷 左中右 l n r 後序遍歷 左右中 l r n ...

二叉樹的前 中 後序遍歷

import lombok.data import lombok.noargsconstructor data noargsconstructor class treenode 前序遍歷 根 左 右 public void preorder 遞迴向右子樹前序遍歷if this right null ...

二叉樹的前 中 後序遍歷

前序 根左右 中序 左根右 後序 左右根 前序遍歷 124563 中序遍歷 546213 後序遍歷 564231 package datastructure public class binarytreedemo class binarytree public binarytree hero roo...