zoukankan      html  css  js  c++  java
  • leetcode——102. 二叉树的层次遍历

    不是自己想出来的,什么时候才能独立完成树的题。

    class Solution(object):
        def levelOrder(self, root):
            """
            :type root: TreeNode
            :rtype: List[List[int]]
            """
            levels=[]
            if not root:
                return levels
            def helper(node,level):
                if len(levels)==level:
                    levels.append([])
                levels[level].append(node.val)
                if node.left:
                    helper(node.left,level+1)
                if node.right:
                    helper(node.right,level+1)
    
            helper(root,0)
            return levels
    执行用时 :20 ms, 在所有 python 提交中击败了90.52%的用户
    内存消耗 :12.7 MB, 在所有 python 提交中击败了5.08%的用户
     
    ——2019.11.15
     
    自己写的,就是不简洁。
     
    public List<List<Integer>> levelOrder(TreeNode root) {
            List<List<Integer>> list = new ArrayList<>();
            List<Integer> l1 = new ArrayList<>();
            if(root == null){
                return list;
            }
            l1.add(root.val);
            list.add(l1);
            Deque<List> q = new ArrayDeque<>();
            int height = 0;
            List ls = new ArrayList();
            ls.add(root);
            ls.add(height);
            q.addLast(new ArrayList(ls));
            order(q,list,height);
            return list;
        }
    
        private void order(Deque<List> q, List<List<Integer>> list,int height) {
            if(q.isEmpty()){
                return;
            }else{
                List<Integer> l = new ArrayList<>();
                while (!q.isEmpty()) {
                    TreeNode tn = (TreeNode) q.getFirst().get(0);
                    int h = (int) q.getFirst().get(1);
                    if (h == height) {
                        if(tn != null) {
                            List ls = new ArrayList();
                            if(tn.left != null){
                                l.add(tn.left.val);
                                ls.add(tn.left);
                                ls.add(height+1);
                                q.addLast(new ArrayList(ls));
                            }
                            ls.clear();
                            if(tn.right != null){
                                l.add(tn.right.val);
                                ls.add(tn.right);
                                ls.add(height+1);
                                q.addLast(new ArrayList(ls));
                            }
                        }
                        q.removeFirst();
                    }else{
                        list.add(new ArrayList<>(l));
                        break;
                    }
                }
            }
            order(q,list,height+1);
        }

     我写得好不简洁,看看大佬的代码都是如此简洁。。。

    ——2020.6.30

    我的前方是万里征途,星辰大海!!
  • 相关阅读:
    【C#语言规范版本5.0学习】1.5类和对象(一)
    【C#语言规范版本5.0学习】1.5类和对象(二、类的方法)
    【C#语言规范版本5.0学习】1.4语句
    mac 安装docker
    Laravel 操作指令
    php 查看接口运行时间
    MySql 按日期条件查询数据
    Laravel操作上传文件的方法
    统计数据表中某个字段的值大于2条的数据
    循环中合并数组
  • 原文地址:https://www.cnblogs.com/taoyuxin/p/11864766.html
Copyright © 2011-2022 走看看