runnig

[leetcode] 107: Binary Tree Level Order Traversal II (done)

Feb 27th, 2013
166
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.41 KB | None | 0 0
  1. /*
  2.  
  3. http://leetcode.com/onlinejudge#question_107
  4.  
  5. Binary Tree Level Order Traversal II
  6. 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).
  7.  
  8. For example:
  9. Given binary tree {3,9,20,#,#,15,7},
  10.     3
  11.    / \
  12.   9  20
  13.     /  \
  14.    15   7
  15. return its bottom-up level order traversal as:
  16. [
  17.   [15,7]
  18.   [9,20],
  19.   [3],
  20. ]
  21.  
  22. */
  23. class Solution {
  24. public:
  25.     typedef vector<int> level_t;
  26.     typedef vector<level_t> traversal_t;
  27.    
  28.     int depth(TreeNode * n)
  29.     {
  30.         if(!n) { return 0;}
  31.         return std::max(depth(n->left), depth(n->right)) + 1;
  32.     }
  33.     traversal_t levelOrderBottom(TreeNode *root) {
  34.        
  35.         const int D = depth(root);
  36.         traversal_t ret(D);
  37.         for(int level = D-1; level >= 0; --level)
  38.         {
  39.             traverse(root, 0, level, ret);
  40.         }
  41.         return ret;
  42.     }
  43.     void traverse(TreeNode * n, int cur_level, int ret_level, traversal_t & ret)
  44.     {
  45.         if(!n) { return; }
  46.        
  47.         if(cur_level < ret_level)
  48.         {
  49.             traverse(n->left, cur_level+1, ret_level, ret);            
  50.             traverse(n->right, cur_level+1, ret_level, ret);            
  51.         }
  52.         else if(cur_level == ret_level)
  53.         {
  54.             const int depth = ret.size();
  55.             ret[depth - 1 - cur_level].push_back(n->val);
  56.         }
  57.     }
  58. };
Advertisement
Add Comment
Please, Sign In to add comment