JAVA遍歷二叉樹
二叉樹的概念
二叉樹(Binary Tree)是個有限元素的集合,該集合或者為空、或者由一個稱為根(root)的元素及兩個不相交的、被分別稱為左子樹和右子樹的二叉樹組成。當集合為空時,稱該二叉樹為空二叉樹。在二叉樹中,一個元素也稱作一個結點。
現在我們給出一組二叉樹
二叉樹遍歷又分為先序遍歷(根節點-左子樹 -右子樹 )、中序遍歷(左子樹 -根節點-右子樹)、後序遍歷(左子樹-右子樹-根節點)
上述二叉樹的先中後遍歷結果分別為
先序遍歷:12---9---76---35---22---16---48---46---40---90
中序遍歷:9---12---16---22---35---40---46---48---76---90
後序遍歷:9---16---22---40---46---48---35---90---76---12
首先我們定義一個二叉樹資料結構的類
<pre name="code" class="java">class Node {
int data; // 根節點資料
Node left; // 左子樹
Node right; // 右子樹
public Node(int data) // 例項化二叉樹類
{
this.data = data;
left = null;
right = null;
}
//{ 12, 76, 35, 22, 16, 48, 90, 46, 9, 40};
public void insert(Node root, int data) { // 向二叉樹中插入子節點
if (data > root.data) // 二叉樹的左節點都比根節點小
{
if (root.right == null) {
root.right = new Node(data);
}
else{
this.insert(root.right, data);
}
}
else
{ // 二叉樹的右節點都比根節點大
if (root.left == null) {
root.left = new Node(data);
}
else {
this.insert(root.left, data);
}
}
}
}
遍歷二叉樹
<pre name="code" class="java">public class BinaryTree {
public static void preOrder(Node root) {
if (root != null) {
System.out.print(root.data + "-");
preOrder(root.left);
preOrder(root.right);
}
}
public static void inOrder(Node root) {
if (root != null) {
inOrder(root.left);
System.out.print(root.data + "--");
inOrder(root.right);
}
}
public static void postOrder(Node root) {
if (root != null) {
postOrder(root.left);
postOrder(root.right);
System.out.print(root.data + "---");
}
}
public static void main(String[] str) {
int[] array = { 12, 76, 35, 22, 16, 48, 90, 46, 9, 40 };
Node root = new Node(array[0]); // 建立二叉樹
for (int i = 1; i < array.length; i++) {
root.insert(root, array[i]); // 向二叉樹中插入資料
}
System.out.println("先序遍歷:");
preOrder(root);
System.out.println();
System.out.println("中序遍歷:");
inOrder(root);
System.out.println();
System.out.println("後序遍歷:");
postOrder(root);
}
}
列印結果:
先序遍歷:
12-9-76-35-22-16-48-46-40-90-
中序遍歷:
9--12--16--22--35--40--46--48--76--90--
後序遍歷:
9---16---22---40---46---48---35---90---76---12---
相關文章
- 二叉樹遍歷 -- JAVA二叉樹Java
- 二叉樹---遍歷二叉樹
- 二叉樹遍歷二叉樹
- 從上到下遍歷二叉樹-Java二叉樹Java
- 二叉樹遍歷方法二叉樹
- 二叉樹的遍歷二叉樹
- C++樹——遍歷二叉樹C++二叉樹
- 二叉樹的廣度遍歷和深度遍歷()二叉樹
- 完全二叉樹的遍歷二叉樹
- 迴圈遍歷二叉樹二叉樹
- 二叉樹四種遍歷二叉樹
- 二叉樹--後序遍歷二叉樹
- 層序遍歷二叉樹二叉樹
- 玩轉二叉樹(樹的遍歷)二叉樹
- 二叉樹建立,前序遍歷,中序遍歷,後序遍歷 思路二叉樹
- 二叉樹的建立、前序遍歷、中序遍歷、後序遍歷二叉樹
- 根據二叉樹的前序遍歷和中序遍歷輸出二叉樹;二叉樹
- 144.二叉樹的前序遍歷145.二叉樹的後序遍歷 94.二叉樹的中序遍歷二叉樹
- [java]二叉樹構建、遍歷、深度、平衡性Java二叉樹
- 二叉樹的非遞迴遍歷——java實現二叉樹遞迴Java
- 二叉樹的遍歷實現二叉樹
- 二叉樹的遍歷筆記二叉樹筆記
- 二叉樹的層序遍歷二叉樹
- 二叉樹的按層遍歷二叉樹
- 二叉樹遍歷方法總結二叉樹
- 【練習】二叉樹的遍歷二叉樹
- 二叉樹的建立與遍歷二叉樹
- 二叉樹非遞迴遍歷二叉樹遞迴
- UVA 536 二叉樹的遍歷二叉樹
- 6.14-二叉樹遍歷二叉樹
- LintCode 前序遍歷和中序遍歷樹構造二叉樹二叉樹
- 二叉樹的遍歷 → 不用遞迴,還能遍歷嗎二叉樹遞迴
- 【LeetCode-二叉樹】二叉樹前序遍歷LeetCode二叉樹
- 什麼是遍歷二叉樹,JavaScript實現二叉樹的遍歷(遞迴,非遞迴)二叉樹JavaScript遞迴
- 二叉樹的構建以及遍歷(Java語言描述)二叉樹Java
- 面試中很值得聊的二叉樹遍歷方法——Morris遍歷面試二叉樹
- 根據前序遍歷序列、中序遍歷序列,重建二叉樹二叉樹
- 二叉樹的遍歷 (迭代法)二叉樹