!层序遍历 把二叉树打印成多行

【题目】

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

【代码】

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

public class Solution {
    ArrayList<ArrayList<Integer> > Print(TreeNode head) {
        ArrayList<ArrayList<Integer>> ret=new ArrayList<>();
        ArrayList<Integer> li=new ArrayList<>();
        Queue<TreeNode> queue=new LinkedList<>();

        if(head==null) return ret;
        TreeNode last=head;//当前行的最右节点
        TreeNode nLast=null;//下一行的最右节点
        queue.offer(head);

        while(!queue.isEmpty()){
            head=queue.poll();
            li.add(head.val);//依次把这一行的元素值记录到list里
            if(head.left!=null){
                queue.offer(head.left);//这一行元素的孩子添加到queue里
                nLast=head.left;
            }
            if(head.right!=null){
                queue.offer(head.right);
                nLast=head.right;
            }
            if(head==last){
            //当前行打印完了,更新last,把这一行加到ret里
                ret.add(new ArrayList<Integer>(li));        
                last=nLast;
                li.clear();
            }
        }
        return ret;

    }

}

【层序遍历】

//借助队列实现层序遍历
    public ArrayList<Integer> PrintFromTopToBottom(TreeNode root) {
        ArrayList<Integer> list=new ArrayList<Integer>();
        if(root==null) return list;
        Queue<TreeNode> queue=new LinkedList<>();
        queue.offer(root);
        while(!queue.isEmpty()){
            TreeNode head=queue.poll();
            if(head.left!=null) queue.offer(head.left);
            if(head.right!=null) queue.offer(head.right);
            list.add(head.val);
        }
        return list;
    }

猜你喜欢

转载自blog.csdn.net/junjunba2689/article/details/80703206