26、剑指 Offer 32 - I. 从上到下打印二叉树

  1. 剑指 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);
    }
}

猜你喜欢

转载自blog.csdn.net/logtcm4/article/details/131198754
今日推荐