package 二叉樹的中序遍歷;import java.util.*;// 定義二叉樹節點
class TreeNode {int val; // 節點值TreeNode left; // 左子節點TreeNode right; // 右子節點// 構造函數TreeNode(int x) {val = x;}
}public class DMain {// 構建二叉樹(層序遍歷方式)public static TreeNode buildTree(Integer[] nums) {// 如果輸入數組為空或第一個節點為null,直接返回空樹if (nums == null || nums.length == 0 || nums[0] == null) {return null;}// 創建根節點TreeNode root = new TreeNode(nums[0]);// 使用隊列輔助構建二叉樹Queue<TreeNode> queue = new LinkedList<>();queue.offer(root); // 將根節點加入隊列int index = 1; // 從數組的第二個元素開始處理while (!queue.isEmpty() && index < nums.length) {// 從隊列中取出當前節點TreeNode node = queue.poll();// 處理左子節點if (nums[index] != null) {node.left = new TreeNode(nums[index]); // 創建左子節點queue.offer(node.left); // 將左子節點加入隊列}index++; // 移動到下一個元素// 處理右子節點if (index < nums.length && nums[index] != null) {node.right = new TreeNode(nums[index]); // 創建右子節點queue.offer(node.right); // 將右子節點加入隊列}index++; // 移動到下一個元素}// 返回構建好的二叉樹的根節點return root;}// 迭代的層序遍歷public static List<List<Integer>> levelOrder(TreeNode root) {// 存儲層序遍歷的結果List<List<Integer>> result = new ArrayList<>();// 如果根節點為空,直接返回空結果if (root == null) {return result;}// 使用隊列輔助層序遍歷Queue<TreeNode> queue = new LinkedList<>();queue.offer(root); // 將根節點加入隊列while (!queue.isEmpty()) {// 當前層的節點數量int levelSize = queue.size();// 存儲當前層的節點值List<Integer> level = new ArrayList<>();// 遍歷當前層的所有節點for (int i = 0; i < levelSize; i++) {TreeNode node = queue.poll(); // 從隊列中取出當前節點level.add(node.val); // 將當前節點的值加入當前層的列表// 將當前節點的左子節點加入隊列if (node.left != null) {queue.offer(node.left);}// 將當前節點的右子節點加入隊列if (node.right != null) {queue.offer(node.right);}}// 將當前層的節點值列表加入結果列表result.add(level);}// 返回層序遍歷的結果return result;}// 主函數public static void main(String[] args) {Scanner sc = new Scanner(System.in);System.out.println("請輸入二叉樹(用,分隔,null表示空節點):");String s=sc.nextLine();String[] str=s.split(",");Integer[] nums=new Integer[str.length];for (int i = 0; i < str.length; i++) {if (str[i].equals("null")) {nums[i] = null;}else{nums[i] = Integer.parseInt(str[i]);}}// 構建二叉樹TreeNode root = buildTree(nums);// 中序遍歷二叉樹List<Integer> integers = inorderTraversal(root);System.out.println("中序遍歷結果:");for (Integer integer : integers) {System.out.print(integer + " ");}System.out.println();//層序遍歷二叉樹List<List<Integer>> result = levelOrder(root);// 輸出層序遍歷結果System.out.println("層序遍歷結果:");for (List<Integer> level : result) {for (int val : level) {System.out.print(val + " ");}System.out.println();}}public static List<Integer> inorderTraversal(TreeNode root) {List<Integer> list = new ArrayList<>();inorder(root, list);return list;}public static void inorder(TreeNode root, List<Integer> list) {if (root == null) {return;}inorder(root.left, list);list.add(root.val);inorder(root.right, list);}}
結果: