栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

二叉树的层次遍历(深度与广度两种解法)java

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

二叉树的层次遍历(深度与广度两种解法)java

解法一:
利用广度优先,对树进行一层一层的遍历,将每一层的节点放入先放入栈中,并记录这一层的节点数,即当前栈的size.并将每一层的节点放入List中,然后再进行出栈操作,每一层有多少节点就进行多少次出栈操作。每次出栈都将其子节点房入住栈中,并将其放入该层对应的List中去,直到栈为空,完成遍历。

public List> levelOrder(TreeNode root) {
 Queue queue=new linkedList<>();
        List> lists=new linkedList<>();
        if (root==null){
            return lists;
        }
        //offer 与 add ,add会在栈满的情况下报异常,而offer只会返回false
        queue.offer(root);
        while (!queue.isEmpty()){
            List list=new linkedList<>();
            int lenth=queue.size();
            for (int i=0;i 

解法二:
利用深度优先,每一次将一个分支访问结束后,才进行另外一条支路的访问。重点在于记录每次访问的节点的层数,如果与结果result的size一样,说明进入了一个新的一层,则需要创建一个新的List存放该层节点。如果不一样,则取出result中存放该层的List,放入节点,并放回result。一直往下遍历,直到节点为空,返回result即可。

public List> levelOrder(TreeNode root) {

     List> lists=new linkedList<>();
     int level=0;
     return dfs(root,lists,level);

    }
    public List> dfs (TreeNode root,List> result, int level){
        if (root==null){
            return result;
        }
        List list =null;
        if (result.size()==level){
            list=new linkedList<>();
            list.add(root.val);
            result.add(list);
        }else {
            list=result.get(level);
            list.add(root.val);
            result.set(level,list);//存进去了后还是要放回去的
        }
        dfs(root.left,result,level+1);
        dfs(root.right,result,level+1);
        return result;
    }

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/340455.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号