题解 | #把二叉树打印成多行#

把二叉树打印成多行

http://www.nowcoder.com/practice/445c44d982d04483b04a54f298796288

广度优先、深度优先(JAVA实现)
层序遍历叫宽度优先(bfs),通常可以使用bfs实现的都可以使用dfs实现

思路一:bfs 时间O(N),每个节点遍历一次,空间O(N),树的宽度

import java.util.*;
public class Solution {
    ArrayList<ArrayList<Integer> > Print(TreeNode pRoot) {
    ArrayList<ArrayList<Integer>> list = new ArrayList<>();
        if(pRoot==null)
            return list;
        Queue<TreeNode> queue = new LinkedList<>();
        queue.add(pRoot);
        while(queue.size()>0)
        {
            int len=queue.size();
            ArrayList<Integer> tempList = new ArrayList<>();
            while(len>0)
            {
                TreeNode node=queue.poll();
                if(node.left!=null)
                    queue.add(node.left);
                if(node.right!=null)
                    queue.add(node.right);
                tempList.add(node.val);
                len--;
            }
            list.add(tempList);
        }
        return list;
    }
}

思路二:dfs 时间O(N),每个节点遍历一次,空间O(N),树的深度,最坏退化链表,最好树为平衡二叉树,log(N)

public class Solution {
    ArrayList<ArrayList<Integer>> list = new ArrayList<>();
        ArrayList<ArrayList<Integer> > Print(TreeNode pRoot) {
        dfs(pRoot,0);
        return list;
    }
    private void dfs(TreeNode root,int level)
    {
        if(root==null)
            return;
        if(list.size()<=level)
        {
            list.add(new ArrayList());//当前深度大于等于列表的长度,需要新建一个子列表
        }
        list.get(level).add(root.val);
        dfs(root.left,level+1);
        dfs(root.right,level+1);
    }
}
全部评论

相关推荐

死在JAVA的王小美:哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈,我也是,让我免了一轮,但是硬气拒绝了
点赞 评论 收藏
分享
点赞 收藏 评论
分享
牛客网
牛客企业服务