107. Binary Tree Level Order Tra

2020-03-16  本文已影响0人  7ccc099f4608

https://leetcode-cn.com/problems/binary-tree-level-order-traversal-ii/

image.png

(图片来源https://leetcode-cn.com/problems/binary-tree-level-order-traversal-ii/

日期 是否一次通过 comment
2020-03-15 0

递归

public List<List<Integer>> levelOrderBottom1(TreeNode root) {
        List<List<Integer>> result = new LinkedList<>();   // 方便移动
        if(root == null) {
            return result;
        }

        helper(root, result, 0);

        return result;
    }

    private void helper(TreeNode root, List<List<Integer>> result, int level) {

        if(root == null) {
            return;
        }

        if(level >= result.size()) {
            result.add(0, new ArrayList<>());  // 放最前面
        }

        result.get(result.size()- 1 - level).add(root.val); // 增量放在对应层级(size()-1) - level
        if(root.left != null) {
            helper(root.left, result, level+1);
        }
        if(root.right != null) {
            helper(root.right, result, level+1);
        }

    }

非递归

public List<List<Integer>> levelOrderBottom(TreeNode root) {
        List<List<Integer>> result = new LinkedList<>();  //  方便移动
        if(root == null) {
            return result;
        }

        Queue<TreeNode> nodeQ = new LinkedList<>();
        nodeQ.offer(root);

        while(! nodeQ.isEmpty()) {
            int qLen = nodeQ.size();
            List<Integer> oneLevel = new ArrayList<>();
            for(int i=0; i<qLen; i++) {
                TreeNode node = nodeQ.poll();
                oneLevel.add(node.val);

                if(node.left != null) {
                    nodeQ.offer(node.left);
                }
                if(node.right != null) {
                    nodeQ.offer(node.right);
                }
            }

            result.add(0, oneLevel);  //  增量放在最前面
        }

        return result;
    }
上一篇 下一篇

猜你喜欢

热点阅读