I
Given a binary tree, return the level order traversal of its nodes' values. (ie, from left to right, level by level).
For example:
Given binary tree{3,9,20,#,#,15,7},
3 / 9 20 / 15 7
return its level order traversal as:
[ [3], [9,20], [15,7] ]
confused what"{1,#,2,3}"means? > read more on how binary tree is serialized on OJ.
OJ's Binary Tree Serialization:
The serialization of a binary tree follows a level order traversal, where '#' signifies a path terminator where no node exists below.
Here's an example:
1 / 2 3 / 4 5The above binary tree is serialized as"{1,2,3,#,#,4,#,#,5}".
1 /** 2 * Definition for binary tree 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 class Solution { 11 public: 12 vector<vector<int> > levelOrder(TreeNode *root) { 13 vector<vector<int>> res; 14 if(root==NULL) return res; 15 queue<TreeNode*> q; 16 q.push(root); 17 while(!q.empty()){ 18 int n=q.size(); 19 vector<int> v; 20 for(int i=0;i<n;i++){ 21 TreeNode *cur=q.front(); 22 q.pop(); 23 v.push_back(cur->val); 24 if(cur->left!=NULL) 25 q.push(cur->left); 26 if(cur->right!=NULL) 27 q.push(cur->right); 28 } 29 res.push_back(v); 30 } 31 return res; 32 } 33 };
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], ]
confused what"{1,#,2,3}"means? > read more on how binary tree is serialized on OJ.
先将结果v存入stack中,最后在从stack倒入res形成倒序,未找到其他好的方法
1 /** 2 * Definition for binary tree 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 class Solution { 11 public: 12 vector<vector<int> > levelOrderBottom(TreeNode *root) { 13 vector<vector<int>> res; 14 if(root==NULL) return res; 15 stack<vector<int>> s; 16 queue<TreeNode*> q; 17 q.push(root); 18 while(!q.empty()){ 19 int n=q.size(); 20 vector<int> v; 21 for(int i=0;i<n;i++){ 22 TreeNode *cur=q.front(); 23 q.pop(); 24 v.push_back(cur->val); 25 if(cur->left!=NULL) 26 q.push(cur->left); 27 if(cur->right!=NULL) 28 q.push(cur->right); 29 30 } 31 s.push(v); 32 } 33 while(!s.empty()){ 34 res.push_back(s.top()); 35 s.pop(); 36 } 37 return res; 38 } 39 };