zoukankan      html  css  js  c++  java
  • 把二叉树打印多行

    题目:从上到下按层打印二叉树,同一层结点从左至右输出。每一层输出一行。

    更容易理解的思路,用计数器的方式 和队列 计数每次出队的节点数 等于这一层的节点数时 表明本层遍历完了

    import java.util.*;
    public class Solution {
        ArrayList<ArrayList<Integer> > Print(TreeNode r) {
              ArrayList<ArrayList<Integer> > res = new ArrayList<>();
            if (r==null) return res;
            //保存当前层的节点值
            ArrayList<Integer> list = new ArrayList<>();
            //保存当前层的节点
            LinkedList<TreeNode> q = new LinkedList<>();
            //初始化
            int start = 0;
            //根节点只有1个
            int end = 1;
            q.addLast(r);
            while(!q.isEmpty()){
                TreeNode t = q.removeFirst();
                list.add(t.val);
                //从队列出队一个 就加1;
                start++;
                if(t.left != null){
                    q.addLast(t.left);
                } 
                if(t.right != null){
                    q.addLast(t.right);
                } 
                //出队的个数 等于这层的数量 表面这层便利完了。
                if (start == end){
                    //恢复初始值
                    start =0;
                    //下一层的节点数
                    end = q.size();
                    res.add(new ArrayList<>(list));
                    list.clear();
                }
            }
            return res;
        }
        
    }

    思路:设置两个指针,一个指向当前层最右,另一个指向现在遍历的节点,,基本就是bfs。。。加一个换行判断

    ArrayList<ArrayList<Integer> > Print(TreeNode pRoot) {
            if(pRoot==null) return new ArrayList<>();
            TreeNode last=pRoot;
               TreeNode nlast=null;
           LinkedList<TreeNode> queue=new LinkedList<TreeNode>();
            ArrayList<Integer> temp=new ArrayList<Integer>();
            ArrayList<ArrayList<Integer>> res=new ArrayList<ArrayList<Integer>>();
            queue.add(pRoot);
            while(!queue.isEmpty()){
                   TreeNode cur=queue.poll();
                temp.add(cur.val);
                if(cur.left!=null){
                    queue.add(cur.left);
                    nlast=cur.left;
                }
                if(cur.right!=null){
                    queue.add(cur.right);
                    nlast=cur.right;
                }
                if(cur==last){
                    res.add(temp);
                    temp=new ArrayList<Integer>();
                    last=nlast;
                }
            }
            return res;
        }
  • 相关阅读:
    Mac终端运行java程序
    Mac上csv导入mysql提示错误[Error Code] 1290
    Mac终端使用mysql
    将spark默认日志log4j替换为logback
    Cocos2d-x 3.x部署到安卓
    Cocos2d-x 3.0 场景切换
    visual studio 未将对象引用设置到对象的实例
    C++ list用法
    减而治之
    递归
  • 原文地址:https://www.cnblogs.com/team42/p/6691797.html
Copyright © 2011-2022 走看看