- 剑指 Offer 32 - I. 从上到下打印二叉树
从上到下打印出二叉树的每个节点,同一层的节点按照从左到右的顺序打印。
例如:
给定二叉树: [3,9,20,null,null,15,7],
3
/ \
9 20
/ \
15 7
返回:
[3,9,20,15,7]
package com.example.lecode.Tree.levelOrder1;
import java.util.LinkedList;
import java.util.Queue;
/**
* 剑指 Offer 32 - I. 从上到下打印二叉树
*
* 从上到下打印出二叉树的每个节点,同一层的节点按照从左到右的顺序打印。
*
* 例如:
* 给定二叉树: [3,9,20,null,null,15,7],
*
* 3
* / \
* 9 20
* / \
* 15 7
* 返回:
*
* [3,9,20,15,7]
*/
public class levelOrder1 {
public static void main(String[] args) {
levelOrder1 Solution1 = new levelOrder1();
TreeNode root = new TreeNode(3);
TreeNode node1 = new TreeNode(9);
TreeNode node2 = new TreeNode(20);
TreeNode node3 = new TreeNode(15);
TreeNode node4 = new TreeNode(7);
root.left = node1;
root.right = node2;
node2.left = node3;
node2.right = node4;
int[] nums = Solution1.levelOrder1(root);
System.out.print("二叉树层序遍历结果为:");
for(int num : nums){
System.out.print(num + " ");
}
}
public static class TreeNode {
int val;
TreeNode left;
TreeNode right;
TreeNode(int x) { val = x; }
}
public int[] levelOrder1(TreeNode root) {
if( root == null ){
return new int[0];
}
int[] result = new int[countTreeNode(root)];
Queue<TreeNode> queue = new LinkedList<>();
queue.offer(root);
int index = 0;
while( !queue.isEmpty()){
int size = queue.size();
for(int i = 0;i < size; i++){
TreeNode node = queue.poll();
// 这是根节点
int n = node.val;
// 将根节点放入数组
result[index++] = n;
if( node.left != null){
queue.offer(node.left);
}
if( node.right != null){
queue.offer(node.right);
}
}
}
return result;
}
// 通过递归调用 countNodes 方法,就可以逐级计算二叉树中所有节点的总数。(计算树的总体大小)
private int countTreeNode(TreeNode root){
if(root == null){
return 0;
}
return 1 + countTreeNode(root.left) + countTreeNode(root.right);
}
}