递归求解二叉树层序遍历(Java)

求二叉树的层序遍历

http://www.nowcoder.com/questionTerminal/04a5560e43e24e9db4595865dc9c63a3

Java递归,直接从某力的二叉树卡片过来,
思想很简单,首先声明一个成员变量供全局使用;
其次写一个向下探索的递归方法,注意先从左边再从右边;每向下一层level+1
这里很巧妙的是,对于二维List来说,将根视为第0层,树的深度正好等于一维List的个数。

import java.util.*;

/*
 * public class TreeNode {
 *   int val = 0;
 *   TreeNode left = null;
 *   TreeNode right = null;
 * }
 */

public class Solution {
    /**
     * 
     * @param root TreeNode类 
     * @return int整型ArrayList<ArrayList<>>
     */
    ArrayList<ArrayList<Integer>> res = new ArrayList<ArrayList<Integer>>();
    public ArrayList<ArrayList<Integer>> levelOrder (TreeNode root) {
        // write code here
        if(root == null){
            return res;
        }
        count(root,0);
        return res;
    }

    public void count(TreeNode node, int level){
        if(level == res.size()){
            res.add(new ArrayList<Integer>());
        }

       ArrayList<Integer> list = res.get(level);
       list.add(node.val);

       if(node.left != null){
           count(node.left, level+1);
       }

       if(node.right != null){
           count(node.right, level+1);
       }

    }
}
全部评论
很有意思的办法,受教惹大佬
1 回复 分享
发布于 2021-09-15 05:31
太离谱了,我想了一个小时都没想出来
1 回复 分享
发布于 2021-06-07 17:40
想问问 {3,9,20,#,#,15,7} 是怎么画出二叉树的?
1 回复 分享
发布于 2021-01-12 18:44
我感觉你这样递归调用是先序遍历二叉树啊 老哥
点赞 回复 分享
发布于 2022-01-08 16:40
这个算法是先序遍历吧,但是每一层的数据都存在了对应的list集合里
点赞 回复 分享
发布于 2021-10-12 17:30
你的res用来存储结果的,但是我我好像没看到你存的部分代码呀
点赞 回复 分享
发布于 2021-06-18 14:22
你还是去看一下二叉树的基础知识比较好
点赞 回复 分享
发布于 2021-04-20 16:28

相关推荐

刷牛客的我很豁达:你是不是对算法有什么误解,你没手握两篇顶刊顶会,还想搞算法岗,有顶刊顶会在算法岗算才入门
点赞 评论 收藏
分享
评论
44
2
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务