美文网首页
LeetCode:102. 二叉树的层序遍历

LeetCode:102. 二叉树的层序遍历

作者: alex很累 | 来源:发表于2022-08-17 10:01 被阅读0次

    问题链接

    102. 二叉树的层序遍历

    问题描述

    给你二叉树的根节点 root ,返回其节点值的 层序遍历 。 (即逐层地,从左到右访问所有节点)。

    示例

    解题思路

    可以使用 深度优先搜索 和 广度优先搜索 分别作答。
    深度优先搜索可以用递归实现,广度优先搜索可以借助队列实现。

    代码示例(JAVA)

    1. 深度优先搜索

    class Solution {
        public List<List<Integer>> levelOrder(TreeNode root) {
            List<List<Integer>> ans = new ArrayList<>();
            dfs(ans, root, 0);
            return ans;
        }
    
        public void dfs(List<List<Integer>> ans, TreeNode root, int x) {
            if (root == null) {
                return;
            }
    
            if (ans.size() < x + 1) {
                ans.add(new ArrayList<>());
            }
            ans.get(x).add(root.val);
            
            dfs(ans, root.left, x + 1);
            dfs(ans, root.right, x + 1);
        }
    }
    

    2. 广度优先搜索

    class Solution {
        public List<List<Integer>> levelOrder(TreeNode root) {
            if (root == null) {
                return new ArrayList<>();
            }
    
            List<List<Integer>> ans = new ArrayList<>();
            Queue<TreeNode> queue = new LinkedList<>();
            queue.offer(root);
            while (!queue.isEmpty()) {
                ans.add(new ArrayList<>());
                int curSize = queue.size();
                for (int i = 1; i <= curSize; i++) {
                    TreeNode node = queue.poll();
                    ans.get(ans.size() - 1).add(node.val);
                    if (node.left != null) {
                        queue.offer(node.left);
                    }
                    if (node.right != null) {
                        queue.offer(node.right);
                    }
                }
            }
    
            return ans;
        }
    }
    

    相关文章

      网友评论

          本文标题:LeetCode:102. 二叉树的层序遍历

          本文链接:https://www.haomeiwen.com/subject/rgpzwrtx.html