---
# System prepended metadata

title: 資料結構 20221114_BinaryTree
tags: [java, Data Structure]

---

# 資料結構 20221114_BinaryTree

>撰寫人[name=AmiYaku1049] [首頁--天空路1049號](https://skys-kid-lai.github.io/1004/)
>>最後編輯[time=Wed, Jan 18, 2023 8:08 PM]
___
## 題目敘述
- 請實作一棵二元樹，陣列或鏈結串列都可以，只要能提供以下功能
首先，詢問使用者需要輸入多少資料
接著，讓使用者輸入資料

- 使用者存好之後，自動列印出依序存入的二元樹…
1.中序走訪
2.後序走訪
3.前序走訪

## 程式碼
```java=
import java.io.*;
import java.util.Scanner;

class TreeNode
{
	int value;
	TreeNode leftNode;
	TreeNode rightNode;

	public TreeNode(int value)
	{
		this.value = value;
		this.leftNode = null;
		this.rightNode = null;
	}
}

class BinaryTree
{
	public TreeNode rootNode;

	public void AddNodeToTree(int value)
	{
		if(rootNode == null)
		{
			rootNode = new TreeNode(value);
			return;
		}
		TreeNode currentNode = rootNode;
		while(true)
		{
			if(value < currentNode.value)
			{
				if(currentNode.leftNode == null)
				{
					currentNode.leftNode = new TreeNode(value);
					return;
				}
				else
					currentNode = currentNode.leftNode;
			}
			else
			{
				if(currentNode.rightNode == null)
				{
					currentNode.rightNode = new TreeNode(value);
					return;
				}
				else
					currentNode = currentNode.rightNode;
			}
		}
	}

	public void InOrder(TreeNode node)
	{
		if(node != null)
		{
			InOrder(node.leftNode);
			System.out.print("[" + node.value + "]" + " ");
			InOrder(node.rightNode);
		}
	}

	public void PreOrder(TreeNode node)
	{
		if(node != null)
		{
			System.out.print("[" + node.value + "]" + " ");
			PreOrder(node.leftNode);
			PreOrder(node.rightNode);
		}
	}

	public void PostOrder(TreeNode node)
	{
		if(node != null)
		{
			PostOrder(node.leftNode);
			PostOrder(node.rightNode);
			System.out.print("[" + node.value + "]" + " ");
		}
	}
} 

class ClassWork_1110832059_1114_PIPBTree 
{
	public static void main(String[] args) 
	{
		Scanner scn = new Scanner(System.in);
		System.out.print("請輸入需要的陣列大小：");
		int n = scn.nextInt();
		int[] arr = new int[n];
		System.out.println("請輸入陣列內容，並以換行分隔： ");
		for(int i = 0; i < arr.length ; i++)
		{
			arr[i] = scn.nextInt();
		}

		BinaryTree tree = new BinaryTree();
		System.out.println("=================================");
		System.out.println("原始陣列內容：");
		for(int i = 0; i < arr.length; i++)
		{
			System.out.print("[" + arr[i] + "]" + " ");
		}
		System.out.println("\n");
		
		for(int i = 0; i < arr.length; i++)
			tree.AddNodeToTree(arr[i]);
		System.out.println("前序走訪：");
		tree.PreOrder(tree.rootNode);
		System.out.println("\n");

		System.out.println("中序走訪：");
		tree.InOrder(tree.rootNode);
		System.out.println("\n");

		System.out.println("後序走訪：");
		tree.PostOrder(tree.rootNode);
		System.out.println("\n");
	}
}

```

## 結果圖示
![](https://i.imgur.com/0yQeZ94.png =50%x)

## 用書資訊：
>書名：圖解資料結構 使用java（第三版）
>作者：吳燦銘、胡昭民
>出版社：博碩文化
>出版年份：2018年05月