BFS实现二叉树的层级遍历,以及修改的BFS对二叉树进行ZigZag遍历(LeetCode原题)

本文介绍了如何使用BFS算法进行二叉树的层级遍历,并讨论了如何修改BFS实现ZigZag(蛇形)的层级遍历,详细解释了算法原理及代码实现。

深度优先搜索算法

其实BFS在我们本科学习数据结构时就学过了,但我想很多人都像我一样当初并不会其代码实现,只是知道其原理。
BFS的原理就是通过两次染色,标记当前遍历层的节点并且标记下一次要遍历的层的节点,递归这个做法执行。通常编程题目需要我们输出所有可能的结果我们会使用DFS,而如果要我们得到的是最短路径的一个结果我们常常使用BFS。BFS有多种实现方法,下面我用的是使用两个队列来实现。

层级遍历二叉树

首先是树的结构

public class TreeNode {
    int val;
    TreeNode left;
    TreeNode right;
    public TreeNode(int val){
        this.val = val;
    }
}

然后建立一颗样例二叉树并且执行我们的BFS算法

public static void main(String[] args) {
        TreeNode node = new TreeNode(0);
        node.left = new TreeNode(1);
        node.right = new TreeNode(2);
        node.left.left = new TreeNode(3);
        node.left.right = new TreeNode(4);
        node.right.right = new TreeNode(5);
        System.out.print(level(node));
    }

具体算法:

static List<List<Integer>> level(TreeNode node){
        List<List<Integer>> res = new ArrayList<>();
      
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值