• 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陷阱与缺陷》读书笔记——前车之覆,后车之鉴
    C语言深度解剖笔记
    感觉压力挺大的!!
    发现中国的代理服务器很少
    我的博客搬家了
    [转]22+1条经典的编程引言
    [转]想象五年之后的你
    什么叫做卷积
    《30天自制操作系统》读书笔记(1)读前感
  • 原文地址:https://www.cnblogs.com/taoyuxin/p/11864766.html
Copyright © 2020-2023  润新知