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

发布于:2022-12-28 ⋅ 阅读:(352) ⋅ 点赞:(0)

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

难度:medium

 

/**
 * Definition for a binary tree node.
 * public class TreeNode {
 *     int val;
 *     TreeNode left;
 *     TreeNode right;
 *     TreeNode() {}
 *     TreeNode(int val) { this.val = val; }
 *     TreeNode(int val, TreeNode left, TreeNode right) {
 *         this.val = val;
 *         this.left = left;
 *         this.right = right;
 *     }
 * }
 */
class Solution {
    public List<List<Integer>> ansList = new ArrayList<List<Integer>>();

    public List<List<Integer>> levelOrder(TreeNode root) {
        
        Func_1(root);
        return ansList;
    }
    // (1)BFS,层序遍历的迭代方式(队列)
    public void Func_1(TreeNode node) {
        // 如果缺少此判断,会在tmpNode.val处报错
        if (node == null) {
            return;
        }
        // 辅助队列
        Queue<TreeNode> queue = new LinkedList<>();
        queue.offer(node);
        while (!queue.isEmpty()) {
            // 存储每层的节点值
            List<Integer> levelList = new ArrayList<>();
            int size = queue.size();
            // 每一层的遍历为一个for循环
            for (int i = 0; i < size; i++) {
                TreeNode tmpNode = queue.poll();
                levelList.add(tmpNode.val);
                if (tmpNode.left != null) {
                    queue.offer(tmpNode.left);
                }
                if (tmpNode.right != null) {
                    queue.offer(tmpNode.right);
                }
            }
            ansList.add(levelList);
        }

    }
    // (2)DFS,层序遍历的递归方式
}

 DFS和BFS

DFS利用递归遍历二叉树

void dfs(TreeNode root) {
    if (root == null) {
        return;
    }
    dfs(root.left);
    dfs(root.right);
}

BFS利用队列遍历二叉树

void bfs(TreeNode root) {
    Queue<TreeNode> queue = new ArrayDeque<>();
    queue.add(root);
    while (!queue.isEmpty()) {
        TreeNode node = queue.poll(); // Java 的 pop 写作 poll()
        if (node.left != null) {
            queue.add(node.left);
        }
        if (node.right != null) {
            queue.add(node.right);
        }
    }
}

  • 其中BFS是可以应用在层序遍历最短路径问题
  • 可以参考leetcode102第二个题解

学会二叉树的层序遍历,可以一口气打完以下十题:


网站公告

今日签到

点亮在社区的每一天
去签到