# 資料結構 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月