【LeetCode_树_广度优先搜索】剑指 Offer 32 - I. 从上到下打印二叉树


题目描述

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

给定二叉树: [3,9,20,null,null,15,7],

    3
   / \
  9  20
    /  \
   15   7

返回:

[3,9,20,15,7]

第一次:2022年12月29日15:32:16

解题思路

面试题32 - I. 从上到下打印二叉树(层序遍历 BFS ,清晰图解):直接看演示图,然后自己按照题目演示的思路写一遍代码

代码展示

class Solution {
    public int[] levelOrder(TreeNode root) {
        // 如果当前节点是空节点
        if (root == null) {
            // 直接返回空数组
            return new int[]{};
        }
        // 栈
        Deque<TreeNode> stack = new ArrayDeque<>();
        // 列表
        List<Integer> temp = new ArrayList<>();
        // 当前栈压入元素
        stack.offer(root);
        // 当前栈里面有元素
        while (stack.size() != 0) {
            // 弹出当前栈的首个元素
            TreeNode cur = stack.poll();
            // 数组添加上当前弹出节点的值
            temp.add(cur.val);
            // 弹出节点是否存在左子树
            if (cur.left != null) {
                // 往栈末尾存入弹出节点的左子树
                stack.offer(cur.left);
            }
            // 弹出节点是否存在右子树
            if (cur.right != null) {
                // 往栈末尾存入弹出节点的右子树
                stack.offer(cur.right);
            }
        }
        // 将列表转化为需要的数组
        int[] res = new int[temp.size()];
        for (int i = 0; i < res.length; i++) {
            res[i] = temp.get(i);
        }
        // 返回数组
        return res;
    }

    public static void main(String[] args) {
        Solution solution = new Solution();
        TreeNode treeNode = new TreeNode(6,
                new TreeNode(2, new TreeNode(1), new TreeNode(4, new TreeNode(3), new TreeNode(5))),
                new TreeNode(7, null, new TreeNode(9, new TreeNode(8), null)));
        int[] ints = solution.levelOrder(treeNode);
        for (int i = 0; i < ints.length; i++) {
            System.out.print(ints[i] + "\t");
        }
    }
}

相似题目

二叉树的层序遍历
在这里插入图片描述

输入:root = [3,9,20,null,null,15,7]
输出:[[3],[9,20],[15,7]]
```java
class Solution {
    public List<List<Integer>> levelOrder(TreeNode root) {
        // 如果当前节点是空节点
        if (root == null) {
            // 直接返回空数组
            return new ArrayList<>();
        }
        // 最终返回值
        List<List<Integer>> res = new ArrayList<>();
        // 栈
        Deque<TreeNode> stack = new ArrayDeque<>();
        // 当前栈压入元素
        stack.offer(root);

        // 当前栈里面有元素
        while (stack.size() != 0) {
            // 当前栈的长度
            int levelNum = stack.size();
            // 每层遍历的列表:存储的是每层的结点值
            List<Integer> temp = new ArrayList<>();
            // 限制每次取元素的次数
            for (int i = 0; i < levelNum; i++) {
                //出队
                TreeNode cur = stack.poll();
                // 存储每层的结点值
                temp.add(cur.val);
                // 弹出节点是否存在左子树
                if (cur.left != null) {
                    // 往栈末尾存入弹出节点的左子树
                    stack.offer(cur.left);
                }
                // 弹出节点是否存在右子树
                if (cur.right != null) {
                    // 往栈末尾存入弹出节点的右子树
                    stack.offer(cur.right);
                }
            }
            //把每层的结点值存储在res中,
            res.add(temp);
        }
        // 返回
        return res;
    }

    public static void main(String[] args) {
        Solution solution = new Solution();
        TreeNode treeNode = new TreeNode(6,
                new TreeNode(2, new TreeNode(1), new TreeNode(4, new TreeNode(3), new TreeNode(5))),
                new TreeNode(7, null, new TreeNode(9, new TreeNode(8), null)));
        List<List<Integer>> lists = solution.levelOrder(treeNode);
        System.out.println(lists);
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值