Leetcode102.二叉树的层次遍历

非递归队列做法:
class Solution {
    public List<List<Integer>> levelOrder(TreeNode root) {
        ArrayList<List<Integer>> result = new ArrayList();
        if(root == null){
        	return result;
        }
        Queue<TreeNode> queue = new LinkedList<TreeNode>();
        queue.add(root);
        int level = 0;
        while ( !queue.isEmpty() ) {
          result.add(new ArrayList<Integer>());
          int level_length = queue.size();
          for(int i = 0; i < level_length; i++) {
            TreeNode node = queue.remove();
            result.get(level).add(node.val);
            if (node.left != null) queue.add(node.left);
            if (node.right != null) queue.add(node.right);
          }
          level++;
        }
        return result;
    }

}
递归:
	ArrayList<List<Integer>> result = new ArrayList();

	public void func(TreeNode node, int level) {
		if (result.size() == level)
			result.add(new ArrayList<Integer>());
		result.get(level).add(node.val);
		if (node.left != null)
			func(node.left, level + 1);
		if (node.right != null)
			func(node.right, level + 1);
	}

	public List<List<Integer>> levelOrder(TreeNode root) {
		if (root == null) {
			return result;
		}
		func(root, 0);

		return result;
	}
PS:递归的内存消耗居然要低于非递归,不知是不是测试样例的问题。。


全部评论

相关推荐

09-29 13:47
门头沟学院 Java
#腾讯&nbsp;#阿里&nbsp;#字节
投递小米集团等公司10个岗位 >
点赞 评论 收藏
分享
Mush3r:1. 项目包装一下,比如说“跟某某电网/企业合作,已经实际交付”之类的,这样别人就觉得你至少是个实际的项目不是个玩具项目; 2. 对于 axios 这种工具,不要写“利用”,别人觉得是就是在调包,没什么技术含量,要写“重新封装”,可能实际上就是封装了一些 url 前缀之类的,但是听起来就更高级一点; 3. 结合缓存实现用户登陆,你作为前端是如何实现的?如何鉴权?token 过期如何设置?如何保证非登录用户不能访问页面/请求拦截器?一个都写没,前面这些都是面试会问的问题,但是面试官看了你这句话可能也不知道该问什么; 4. 利用 Vue3,通过 。。。 组件库,又是调包,这种没什么工作量,就是拿过来用一用的就不要往详情里写了,开头总结的时候提一嘴就行了; 后面小程序不怎么懂,不评价了
点赞 评论 收藏
分享
点赞 收藏 评论
分享
牛客网
牛客企业服务