美文网首页
(树)剑指Offer--把二叉树打印成多行

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

作者: 小北觅 | 来源:发表于2019-01-05 22:10 被阅读3次

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

    思路:原型为层次遍历,因为要每一行换行输出,所以需要知道每一行多少元素。可以采用一个队列+两个状态变量的思路。打印每一层前,每行元素的个数为当前队列内元素的个数,并重置起始变量为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;
        }
        
    }
    

    相关文章

      网友评论

          本文标题:(树)剑指Offer--把二叉树打印成多行

          本文链接:https://www.haomeiwen.com/subject/ongeaftx.html