LeetCode102.二叉树的层序遍历

102.二叉树的层序遍历

题目链接

参考了 nettee在leetcode的题解,仅供个人学习

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

示例 1:

输入:root = [3,9,20,null,null,15,7] 输出:[[3],[9,20],[15,7]] 示例 2:

输入:root = [1] 输出:[[1]] 示例 3:

输入:root = [] 输出:[]


题解 迭代法

  1. 借助双端队列
  2. 初始化一个空列表res存储结果
  3. 初始化队列queue进行辅助运算
  4. 当队列不为空时,进入循环
    • 获取当前队列的长度,n表示当前层的节点数(层序遍历,每一层的节点有可能是下一层节点的root)
    • 初始化一个空号列表level存储当前层的节点值
    • 遍历n个节点(一行)
    • 从队列中取出一个节点node
    • 将node.val加入level列表中
    • 如果node有左节点就将左节点加入队列
    • 如果node有右节点就将右节点加入队列
    • 将当前层的level列表加入最终res中
  5. 重复步骤4,直到队列为空
  6. 返回res

层序遍历

/**
 * 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>> levelOrder(TreeNode root) {
        List<List<Integer>> res = new ArrayList<>();

        Queue<TreeNode> queue = new ArrayDeque<>();
        if(root != null){
            queue.add(root);
        }

        while(!queue.isEmpty()){
            int n = queue.size(); //n为二叉树某一行的长度
            List<Integer> level = new ArrayList<>();
            for(int i = 0; i < n; i++){
                TreeNode node = queue.poll();
                level.add(node.val);
                if(node.left != null){
                    queue.add(node.left);//将左孩子加入queue
                }
                if(node.right != null){
                    queue.add(node.right);//将右孩子加入queue
                }
            }
            res.add(level);
        }
       return res;

    } 
    
}

DFS与BFS模版一定要背会


DFS使用递归(stack)

void DFS(TreeNode root){
	if(root == null) return;

	dfs(root.left);
	dfs(root.right);
}
	

BFS使用队列(queue)

void bfs(TreeNode root){
	//定义一个队列
	Queue<treeNode> queue = new ArrayDeque<>();
	queue.add(root);
	
	//当二叉树不空时进入循环
	while (!queue.isEmpty()){
		TreeNode ndoe = queue.poll(); //Java的pop写作poll()
		if(node.left != null){
			queue.add(node.left);
		}
		if(node.right != null){
			queue.add(node.right);
		}
	}
}


BFS也可以找最短路径BFS找最短路径


  • 23
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值