题目:
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 #include11 #include 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 > levelOrderBottom(TreeNode* root) {20 stack s;21 queue q;22 vector > 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 >(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 };