107. Binary Tree Level Order Traversal II
题目:
107. 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,null,null,15,7]
,
3 / \ 9 20 / \ 15 7
return its bottom-up level order traversal as:
[ [15,7], [9,20], [3] ]
题目分析:
这道题本身不难,用一个广度优先遍历先分层,再将每层的结果自左向右输出。方便起见用到了栈和队列。记录这道题是一些语法的使用上,帮助自己回忆。
代码:
1 /** 2 * Definition for a binary tree node. 3 * struct TreeNode { 4 * int val; 5 * TreeNode *left; 6 * TreeNode *right; 7 * TreeNode(int x) : val(x), left(NULL), right(NULL) {} 8 * }; 9 */ 10 #include <stack> 11 #include <queue> 12 class Solution { 13 public: 14 struct Pair{ 15 TreeNode* root; 16 int level; 17 Pair(TreeNode* _root,int _level) : root(_root),level(_level) {} 18 }; 19 vector<vector<int>> levelOrderBottom(TreeNode* root) { 20 stack<Pair> s; 21 queue<Pair> q; 22 vector<vector<int>> v; 23 if(!root) return v; 24 q.push(Pair(root,0)); 25 while(!q.empty()) 26 { 27 if(q.front().root->right) 28 q.push(Pair(q.front().root->right,q.front().level+1)); 29 if(q.front().root->left) 30 q.push(Pair(q.front().root->left,q.front().level+1)); 31 s.push(q.front()); 32 q.pop(); 33 } 34 int level = s.top().level; 35 v=vector<vector<int>>(level+1); 36 while(!s.empty()) 37 { 38 v[level-s.top().level].push_back(s.top().root->val); 39 s.pop(); 40 } 41 return v; 42 } 43 };