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

我的前方是万里征途,星辰大海!!
原文地址:https://www.cnblogs.com/taoyuxin/p/11864766.html