剑指OfferJZ60:把二叉树打印成多行-java版

发布时间:2023-06-12 18:30

剑指OfferJZ60:把二叉树打印成多行-java版

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

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

剑指OfferJZ60:把二叉树打印成多行-java版_第1张图片

类似于之字形打印:
剑指OfferJZ60:把二叉树打印成多行-java版_第2张图片

之字形打印:即第一行(奇数行)从左往右打印,第二行(偶数行)从右往左打印,第三行从左往右打印。。。
详情见: 按之字形顺序打印二叉树.

而该题每一行都是按顺序从左到右打印

 import java.util.ArrayList;
import java.util.LinkedList;
import java.util.Queue;


/*
public class TreeNode {
    int val = 0;
    TreeNode left = null;
    TreeNode right = null;

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

    }

}
*/
public class Solution {
    ArrayList<ArrayList<Integer> > Print(TreeNode pRoot) {
    
        //大数组
        ArrayList<ArrayList<Integer>> ans = new ArrayList<>();
        //宽搜bfs:使用队列
        Queue<TreeNode> queue=new LinkedList<>();
        //首先队列中初始位置放入当前节点(也就是根节点)
        queue.add(pRoot);
        int sum=1;//用来保存每一层的节点个数
        //int num=1;//用来判断当前层是第几层

        while(!queue.isEmpty() && pRoot!=null){
            //准备一个数组(存储每一层节点的小数组)
            ArrayList<Integer> list = new ArrayList<>();
            int temp=0;//用来统计每一层节点个数
            while(sum>0){
                //将当前节点取出并删除
                TreeNode node=queue.poll();
                assert node!=null;
                //并把当前节点的值放入到准备的数组中
                list.add(node.val);

                if(node.left!=null){
                    temp++;
                    queue.add(node.left);//将左孩子放入队列
                }
                if(node.right!=null){
                    temp++;
                    queue.add(node.right);//将右孩子放入队列
                }
                sum--;
            }
            sum=temp;
            /*if(num%2==0){
                //(偶数层)从右往左打印
                for(int i=0,j=list.size()-1;i
            
            ans.add(list);//将小数组放入大数组中
        }
        return ans;
    }
    
}

剑指OfferJZ60:把二叉树打印成多行-java版_第3张图片

ItVuer - 免责声明 - 关于我们 - 联系我们

本网站信息来源于互联网,如有侵权请联系:561261067@qq.com

桂ICP备16001015号