zoukankan      html  css  js  c++  java
  • Binary Tree Level Order Traversal II

    Link: http://oj.leetcode.com/problems/binary-tree-level-order-traversal-ii/

    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).

    For 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 /**
     2  * Definition for binary tree
     3  * public class TreeNode {
     4  *     int val;
     5  *     TreeNode left;
     6  *     TreeNode right;
     7  *     TreeNode(int x) { val = x; }
     8  * }
     9  */
    10 public class Solution {
    11     public ArrayList<ArrayList<Integer>> levelOrderBottom(TreeNode root) {
    12         ArrayList<ArrayList<Integer>> result = new ArrayList<ArrayList<Integer>>();
    13         if (root == null)
    14             return result;
    15         // the algo is based on bfs, here I need a queue data structure
    16         ArrayList<TreeNode> queue = new ArrayList<TreeNode>();
    17         queue.add(root);
    18         ArrayList<Integer> root_value = new ArrayList<Integer>();
    19         // this is a special case, the value of the root should
    20         // be added first.
    21         root_value.add(root.val);
    22         result.add(root_value);//
    23         while (!queue.isEmpty()) {
    24             // all the nodes of the next level
    25             ArrayList<TreeNode> next_level = new ArrayList<TreeNode>();
    26             for (TreeNode t : queue) {
    27                 // iterate through the queue
    28                 ArrayList<TreeNode> temp_treenode = getChildren(t);
    29                 // append all of the next level node to next_level
    30                 next_level.addAll(temp_treenode);
    31             }
    32             // clear the queue
    33             queue = new ArrayList<>();
    34             // special case, if there's no next level nodes
    35             if (next_level.size() != 0) {
    36                 queue.addAll(next_level);
    37                 result.add(getValue(next_level));
    38             }
    39         }
    40         ArrayList<ArrayList<Integer>> res = new ArrayList<ArrayList<Integer>>();
    41         for(int i = result.size()-1;i>=0;i--){
    42             res.add(result.get(i));
    43         }
    44         return res;
    45     }
    46     public ArrayList<Integer> getValue(ArrayList<TreeNode> list) {
    47         ArrayList<Integer> result = new ArrayList<Integer>();
    48         for (TreeNode t : list) {
    49             result.add(t.val);
    50         }
    51         return result;
    52     }
    53 
    54     public ArrayList<TreeNode> getChildren(TreeNode root) {
    55         ArrayList<TreeNode> result = new ArrayList<TreeNode>();
    56         if (root.left != null)
    57             result.add(root.left);
    58         if (root.right != null)
    59             result.add(root.right);
    60         return result;
    61     }
    62 }

    跟I差不多。revere一下I的结果。。

  • 相关阅读:
    java ssh 框架下 利用junit4 spring-test进行单元测试
    在写junit test 的时候出现的java.lang.UnsupportedClassVersionError问题
    IBatis 2.x 和 MyBatis 3.0.x 的区别(从 iBatis 到 MyBatis)
    mysql GET DIAGNOSTICS 语法
    如何优化用SQL语句INSERT INTO … SELECT插入数据时锁全表的问题
    mysql中binlog_format模式与配置详解
    MySql 里的IFNULL、NULLIF和ISNULL用法区别
    mysql order by 优化 |order by 索引的应用
    几款开源ESB总线的比较
    ETL简介
  • 原文地址:https://www.cnblogs.com/Altaszzz/p/3705964.html
Copyright © 2011-2022 走看看