首页 > 编程语言 >BFS场景样例测试--层次遍历--用Java实现

BFS场景样例测试--层次遍历--用Java实现

时间:2022-12-25 21:33:40浏览次数:41  
标签:TreeNode cur -- list 样例 int new Java root

我们今天研究下层次便利用BFS来实现

 

首先确定数据结构

/**
 * 二叉树数据结构节点
 */
public class TreeNode {

    int value;
    TreeNode left;
    TreeNode right;

    public TreeNode(int val){
        this.value = val;
    }
}

  然后走下场景的代码

 

import java.util.ArrayDeque;
import java.util.ArrayList;
import java.util.List;
import java.util.Queue;

public class BFSDemo {

    /***
     * 层次遍历
     * @param root
     * @return
     */
    public List<List<Integer>> levelOrder(TreeNode root){
        Queue<TreeNode>  q = new ArrayDeque<>();

        // 将根节点加入队列
        if(null != root){
            q.offer(root);
        }

        List<List<Integer>> res = new ArrayList<>();

        while (!q.isEmpty()){
            int sz = q.size();

            // TODO  这里有优化空间 暂时不修改
            List<Integer> num = new ArrayList<>();

            for (int i = 0; i < sz; i++) {
                TreeNode cur = q.poll();

                // 将左右节点加入队列 以备下一轮迭代
                if(cur.left!=null){
                    q.offer(cur.left);
                }

                if(cur.right!=null){
                    q.offer(cur.right);
                }

                num.add(cur.value);

            }
            res.add(num);

        }
        return res;
    }

    public static void main(String[] args){

        // 构建测试数据

        TreeNode root = new TreeNode(9);
        TreeNode node1 = new TreeNode(1);
        TreeNode node2 = new TreeNode(2);
        TreeNode node7 = new TreeNode(7);
        TreeNode node5 = new TreeNode(5);
        TreeNode node4 = new TreeNode(4);

        root.left = node1;
        root.right = node2;
        node2.left = node7;
        node2.right = node5;
        node7.left = node4;

        BFSDemo bfsDemo = new BFSDemo();

        List<List<Integer>> list = bfsDemo.levelOrder(root);

        if(null==list){
            return;
        }
        //System.out.println(list.toString());
        for (int i = 0; i < list.size(); i++) {
            System.out.print("[");
            if(null !=list.get(i) && list.get(i).size()!=0) {
                for (int j = 0; j < list.get(i).size(); j++) {
                    System.out.print( " "+list.get(i).get(j)+" ");
                }
            }
            System.out.println("]");
        }
    }
}

  执行main run

 

结果

 

标签:TreeNode,cur,--,list,样例,int,new,Java,root
From: https://www.cnblogs.com/zhou-789profession/p/17004636.html

相关文章

  • 【猿如意】中的『格式工厂』工具详情介绍
    目录​​一、什么是猿如意​​​​二、格式工厂简介​​​​三、通过猿如意获取格式工厂​​​​四、格式工厂使用技巧​​​​4.1基础设置​​​​4.2使用示例​......
  • 边缘计算小组:VMware、联想、Stackpath、IBM和Edgio访谈
    边缘计算正在将工作负载、数据、处理和业务价值从云端转移到低延迟和实时处理的全球和分布式操作。尽管云提供了大规模的集中化、规模经济和自助服务,但它根本无法跟上企业......
  • .net 基础服务开源战略规划备忘录
    .net开源技术方向战略备忘记录公司现状1.技术人员水平限制:基础研发人员技术细节,性能处理能力不足,技术视野不够开阔;甚至一些高可用,高性能方案......
  • 准备新建博客,大家有什么好的建议啊?
    记录一些自己学习ML、DL、FL、KD等笔记,编程及调参笔记,顺便也记录一下个人生活! 请问大家有什么好的建议呢? 毕竟前人栽树,后人乘凉。希望将自己的学习和别人一起分享,一......
  • 《痞子衡嵌入式半月刊》 第 66 期
    痞子衡嵌入式半月刊:第66期这里分享嵌入式领域有用有趣的项目/工具以及一些热点新闻,农历年分二十四节气,希望在每个交节之日准时发布一期。本期刊是开源项目(GitHub:​​Ja......
  • SIFT特征原理简析(HELU版)
    SIFT(Scale-InvariantFeatureTransform)是一种具有尺度不变性和光照不变性的特征描述子,也同时是一套特征提取的理论,首次由D.G.Lowe于2004年以《DistinctiveImageFeatu......
  • 特征点寻找的基础数据结构和函数
       当进行跟踪时或者其他类型的用到关键点及其描述符的分析时,通常需要做三件事情:第一个是根据一些关键点的定义搜索图像并查找该图像中的所有关键点;第二个是为发现......
  • ()找圆算法((HoughCircles)总结与优化
       Opencv内部提供了一个基于Hough变换理论的找圆算法,HoughCircle与一般的拟合圆算法比起来,各有优势:优势:HoughCircle对噪声点不怎么敏感,并且可以在同一个图中......
  • 我学习图像处理的小结
      前一段时间,我一直在制作OpenCV基础知识的课件(《学习OpenCV3.0初级实战视频课程》 ​​http://edu.51cto.com/course/10381.html​​​,《学习OpenCV3.0中级实战视......
  • 求解向量和轮廓的交点
    在“学习OpenCV3"的QQ群众,网友且行且珍惜针对前期博客中的内容提出了以下问题:比如这张图,利用PCA求出了特征向量之后,我想要求解与轮廓的交点,不知道有没有简单的方法@禾......