把二叉树打印多行

题目描述

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

思路:

和“按之字形顺序打印二叉树”是一样的做法

我 是 用两个双端队列

尝试用一个双端队列 是不行的

import java.util.*;


/*
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> > res = new ArrayList<ArrayList<Integer> >();
        
        //边界
        if(null == pRoot) return res; 
        
        //该行的数字的开始和结束
        int count = 1;
        Deque<TreeNode> deque1 = new LinkedList<TreeNode>();
        Deque<TreeNode> deque2 = new LinkedList<TreeNode>();
        deque1.addLast(pRoot);
        while(!deque1.isEmpty() || !deque2.isEmpty()){
            ArrayList<Integer> tempList = new ArrayList<Integer>();
            //把队列中的元素出队
            if(!deque1.isEmpty()){
                while(!deque1.isEmpty()){
                    TreeNode node = deque1.pollFirst();
                    tempList.add(node.val);
                    if(node.left != null) deque2.addLast(node.left);
                    if(node.right != null) deque2.addLast(node.right);
                }
            }else{
                while(!deque2.isEmpty()){
                    TreeNode node = deque2.pollFirst();
                    tempList.add(node.val);
                    if(node.left != null) deque1.addLast(node.left);
                    if(node.right != null) deque1.addLast(node.right);
                }
            }
            res.add(tempList);
            count *= 2;
        }
        return res;
    }
    
}

还有别人的方法,是用递归做的,感觉很妙

链接:https://www.nowcoder.com/questionTerminal/445c44d982d04483b04a54f298796288
来源:牛客网

//用递归做的
public class Solution {
    ArrayList<ArrayList<Integer> > Print(TreeNode pRoot) {
        ArrayList<ArrayList<Integer>> list = new ArrayList<>();
        depth(pRoot, 1, list);
        return list;
    }
     
    private void depth(TreeNode root, int depth, ArrayList<ArrayList<Integer>> list) {
        if(root == null) return;
        if(depth > list.size())
            list.add(new ArrayList<Integer>());
        list.get(depth -1).add(root.val);
         
        depth(root.left, depth + 1, list);
        depth(root.right, depth + 1, list);
    }
}

猜你喜欢

转载自blog.csdn.net/qq_39474604/article/details/91791528