• lintcode70- Binary Tree Level Order Traversal II- medium


    Given a binary tree, return the bottom-up level order traversal of its nodes' values. (ie, from left to right, level by level from leaf to root).

    Example

    Given binary tree {3,9,20,#,#,15,7},

        3
       / 
      9  20
        /  
       15   7
    

    return its bottom-up level order traversal as:

    [
      [15,7],
      [9,20],
      [3]
    ]

    1. 和I一模一样,只是每次给result加的时候加在开头。写法是index写前面:result.add(0, level);

    2.和I一模一样,只是最后加一个List逆序。Collections.reverse(result);

    3. Stack 套queue,循环一次加进stack,再取出来放进result。

    1的实现:

    /**
     * Definition of TreeNode:
     * public class TreeNode {
     *     public int val;
     *     public TreeNode left, right;
     *     public TreeNode(int val) {
     *         this.val = val;
     *         this.left = this.right = null;
     *     }
     * }
     */
    
    
    public class Solution {
        /*
         * @param root: A tree
         * @return: buttom-up level order a list of lists of integer
         */
        public List<List<Integer>> levelOrderBottom(TreeNode root) {
            // write your code here
            List<List<Integer>> result = new LinkedList<List<Integer>>();
            if (root == null) {
                return result;
            }
            
            Queue<TreeNode> queue= new LinkedList<TreeNode>();
            queue.offer(root);
            while (!queue.isEmpty()) {
                int size = queue.size();
                List<Integer> level = new ArrayList<Integer>();
                for (int i = 0; i < size; i++) {
                    TreeNode node = queue.poll();
                    level.add(node.val);
                    if (node.left != null) {
                        queue.offer(node.left);
                    }
                    if (node.right != null) {
                        queue.offer(node.right);
                    }
                }
                result.add(0, level);
            }
            return result;
        }
    }

    2的实现:

    public class Solution {
        /**
         * @param root: The root of binary tree.
         * @return: buttom-up level order a list of lists of integer
         */
        public List<List<Integer>> levelOrderBottom(TreeNode root) {
            List<List<Integer>> result = new ArrayList<>();
            if (root == null) {
                return result;
            }
            Queue<TreeNode> queue = new LinkedList<TreeNode>();
            queue.offer(root);
            
            while (!queue.isEmpty()) {
                int size = queue.size();
                List<Integer> level = new ArrayList<>();
                for (int i = 0; i < size; i++) {
                    TreeNode head = queue.poll();
                    level.add(head.val);
                    if (head.left != null) {
                        queue.offer(head.left);
                    }
                    if (head.right != null) {
                        queue.offer(head.right);
                    }
                }
                result.add(level);
            }
            
            Collections.reverse(result);
            return result;
        }
    }

    3的实现:

    /**
     * Definition of TreeNode:
     * public class TreeNode {
     *     public int val;
     *     public TreeNode left, right;
     *     public TreeNode(int val) {
     *         this.val = val;
     *         this.left = this.right = null;
     *     }
     * }
     */
    
    
    public class Solution {
        /*
         * @param root: A tree
         * @return: buttom-up level order a list of lists of integer
         */
        public List<List<Integer>> levelOrderBottom(TreeNode root) {
            // write your code here
            List<List<Integer>> result = new ArrayList<List<Integer>>();
            if (root == null) {
                return result;
            }
            
            Stack<Queue<TreeNode>> stack = new Stack<Queue<TreeNode>>();
            Queue<TreeNode> queue = new LinkedList<TreeNode>();
            queue.add(root);
            while (queue.size() > 0) {
                Queue<TreeNode> newQueue = new LinkedList<TreeNode>();
                for (TreeNode node : queue) {
                    if (node.left != null) {
                        newQueue.offer(node.left);
                    }
                    if (node.right != null) {
                        newQueue.offer(node.right);
                    }
                }
                stack.push(queue);
                queue = newQueue;
            }
            
            while (!stack.isEmpty()) {
                queue = stack.pop();
                List<Integer> level = new ArrayList<Integer>();
                for (TreeNode node : queue) {
                    level.add(node.val);
                }
                result.add(level);
            }
            return result;
        }
    }
  • 相关阅读:
    python列表
    OSS对象存储的文件上传、解冻、下载与查看
    常用压缩命令
    SWAP
    K8S_第一课作业_20200407
    K8S--- yaml配置文件
    K8S 简介
    php-fpm进程数控制
    linux常用查询命令
    Docker Note1——架构和三要素
  • 原文地址:https://www.cnblogs.com/jasminemzy/p/7709459.html
Copyright © 2020-2023  润新知