(树)剑指Offer--把二叉树打印成多行

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

思路:原型为层次遍历,因为要每一行换行输出,所以需要知道每一行多少元素。可以采用一个队列+两个状态变量的思路。打印每一层前,每行元素的个数为当前队列内元素的个数,并重置起始变量为0。这样当start=end时就说明本行打印完毕。
当然也可以用两个队列去做。一个辅助队列用于把原队列的内容保存下来

import java.util.*;
public class Solution {
    ArrayList<ArrayList<Integer> > Print(TreeNode pRoot) {
        ArrayList<ArrayList<Integer>> result= new ArrayList<ArrayList<Integer>>(); 
         if(pRoot==null)
             return result;
         Queue<TreeNode> queue = new LinkedList<TreeNode>();
        TreeNode node = pRoot;
        int start = 0;
        int end = 1;
        queue.offer(node);
        ArrayList<Integer> al = new ArrayList<Integer>();
        while(!queue.isEmpty()){
            TreeNode temp = queue.poll();
            al.add(temp.val);
            start++;
            if(temp.left!=null)
                queue.offer(temp.left);
            if(temp.right!=null)
                queue.offer(temp.right);
            
            if(start==end){
                result.add(al);
                start=0;
                end = queue.size();
                al = new ArrayList<Integer>();
            }
        }
        return result;
    }
    
}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

友情链接更多精彩内容