Skip to content

Commit 54e68e4

Browse files
committed
add one more
1 parent 2958a1b commit 54e68e4

File tree

1 file changed

+55
-12
lines changed

1 file changed

+55
-12
lines changed

BinaryTreeLevelOrderTraversalII/BinaryTreeLevelOrderTraversalII.cpp

Lines changed: 55 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -5,11 +5,11 @@
55
//
66
// For example:
77
// Given binary tree {3,9,20,#,#,15,7},
8-
// 3
9-
// / \
10-
// 9 20
11-
// / \
12-
// 15 7
8+
// " 3 "
9+
// " / \ "
10+
// " 9 20 "
11+
// " / \ "
12+
// " 15 7 "
1313
// return its bottom-up level order traversal as:
1414
// [
1515
// [15,7]
@@ -20,6 +20,8 @@
2020

2121
#include <iostream>
2222
#include <vector>
23+
#include <stack>
24+
2325
using namespace std;
2426

2527
/**
@@ -34,34 +36,75 @@ struct TreeNode {
3436

3537
class Solution {
3638
public:
37-
vector<vector<int> > levelOrderBottom(TreeNode *root) {
39+
vector<vector<int> > levelOrderBottom(TreeNode *root)
40+
{
41+
//return levelOrderBottom1(root);
42+
return levelOrderBottom2(root);
43+
}
44+
45+
vector<vector<int> > levelOrderBottom1(TreeNode *root)
46+
{
3847
vector<vector<int> > res;
3948
vector<int> row;
40-
for (int level = maxHeight(root); level >= 1; level--) {
49+
for (int level = maxHeight(root); level >= 1; level--)
50+
{
4151
row.clear();
4252
levelOrderBottomHelper(root, level, row);
4353
res.push_back(row);
4454
}
4555
return res;
46-
4756
}
4857

49-
int maxHeight(TreeNode *node) {
58+
int maxHeight(TreeNode *node)
59+
{
5060
if(NULL == node) return 0;
5161
return 1 + max(maxHeight(node->left), maxHeight(node->right));
5262
};
5363

54-
void levelOrderBottomHelper(TreeNode *node, int level, vector<int> &row) {
64+
void levelOrderBottomHelper(TreeNode *node, int level, vector<int> &row)
65+
{
5566
if (level == 0 || node == NULL) return;
56-
if (level == 1) {
67+
if (level == 1)
68+
{
5769
row.push_back(node->val);
5870
return;
5971
}
6072
levelOrderBottomHelper(node->left, level-1, row);
6173
levelOrderBottomHelper(node->right, level-1, row);
6274
}
75+
76+
vector<vector<int> > levelOrderBottom2(TreeNode *root)
77+
{
78+
vector<vector<int> > res;
79+
if (!root) return res;
80+
81+
stack<vector<TreeNode*> > stk;
82+
stk.push(vector<TreeNode*>(1, root));
83+
while(true)
84+
{
85+
vector<TreeNode*> row;
86+
for (vector<TreeNode*>::iterator it = stk.top().begin(); it != stk.top().end(); ++it)
87+
{
88+
if ((*it)->left) row.push_back((*it)->left);
89+
if ((*it)->right) row.push_back((*it)->right);
90+
}
91+
if (row.empty()) break;
92+
stk.push(row);
93+
}
94+
95+
while (!stk.empty())
96+
{
97+
vector<int> row;
98+
for (vector<TreeNode*>::iterator it = stk.top().begin(); it != stk.top().end(); ++it)
99+
row.push_back((*it)->val);
100+
res.push_back(row);
101+
stk.pop();
102+
}
103+
return res;
104+
}
63105
};
64106

65-
int main() {
107+
int main()
108+
{
66109
return 0;
67110
}

0 commit comments

Comments
 (0)