public class Solution { public static void main(String[] args) { Integer[] arr = { 3, 9, 20, null, null, 15}; // 根据数组构造出二叉树 TreeNode treeNode = creatTreeNode(arr, 0); // 层序有Null值的打印二叉树 printBinaryTree(treeNode); } // 根据数组构造二叉树 public static TreeNode creatTreeNode(Integer[] arr, int index) { if (index >= arr.length) { return null; } if (arr[index] == null) { return null; } TreeNode root = new TreeNode(arr[index]); root.left = creatTreeNode(arr, index * 2 + 1); root.right = creatTreeNode(arr, index * 2 + 2); return root; } // 层序打印二叉树,存在null值 public static void printBinaryTree(TreeNode root) { if (root == null) return; // 首先获取到二叉树的深度,用来判断终止条件 int maxDepth = maxDepth(root); // 当前遍历到的二叉树高度 int depth = 0; Queue<TreeNode> queue = new LinkedList<>(); List<Integer> list = new ArrayList<>(); queue.offer(root); while (!queue.isEmpty() && depth < maxDepth) { depth++; // 第一层为1 第二层为2 第三层为4 这是等比数列 for (int i = 0; i < Math.pow(2, depth - 1); i++) { root = queue.poll(); if (root == null) { list.add(null); queue.offer(null); queue.offer(null); } else { list.add(root.val); queue.offer(root.left); queue.offer(root.right); } } } list.forEach((item) -> { if (item == null) { System.out.print("null "); } else { System.out.print(item + " "); } }); } // 获取到二叉树的深度 public static int maxDepth(TreeNode root) { if (root == null) { return 0; } int left = maxDepth(root.left); int right = maxDepth(root.right); return (left > right ? left : right) + 1; } }标签:arr,Java,int,层序,queue,二叉树,null,root From: https://www.cnblogs.com/linxuannihao/p/17366254.html