由买买提看人间百态

boards

本页内容为未名空间相应帖子的节选和存档,一周内的贴子最多显示50字,超过一周显示500字 访问原贴
JobHunting版 - 请教一道Leetcode 题,多谢
相关主题
leetcode中的binary tree level order traverse II总是有run t我又fail了面试
相关话题的讨论汇总
话题: vector话题: treenode话题: stack话题: level话题: int
进入JobHunting版参与讨论
1 (共1页)
I*********e
发帖数: 61
1
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).
感觉应该用post-order traverse,但是不知道怎么样才能从最低的一个Level开始
return。
多谢指教。
q****m
发帖数: 177
2
recursive ?

nodes

【在 I*********e 的大作中提到】
: 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).
: 感觉应该用post-order traverse,但是不知道怎么样才能从最低的一个Level开始
: return。
: 多谢指教。

p*****2
发帖数: 21240
3
BFS DFS应该都可以。
C***U
发帖数: 2406
4
如果是leetcode那个要求的话 你就从上往下走 然后存的时候倒着存就可以了‘啊

nodes

【在 I*********e 的大作中提到】
: 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).
: 感觉应该用post-order traverse,但是不知道怎么样才能从最低的一个Level开始
: return。
: 多谢指教。

l****c
发帖数: 782
5
recursion+stack?
1.从上往下读children,输入为root,只要不为空,将children存在vector里面,推入
stack
2.直到输入为空,跳出recursion,
4.读stack?
l****c
发帖数: 782
6
好像不用recursion也行,就用一个tmp_vector,如果不为空,就继续读vector里面每
个node的children,写入新tmp_vector,新的tmp也加到stack里面,最后读stack。
e***s
发帖数: 799
7
BFS变形,一个Queue,一个Stack。
root入Queue, 出Queue入Stack, root.Right入Queue, root.Left入Queue......
入队列的时候先右后左,从Stack里出来就是从左往右了
不知道对不对。
l****c
发帖数: 782
8
你这样可能无法输出example那样的不同高度分组吧

【在 e***s 的大作中提到】
: BFS变形,一个Queue,一个Stack。
: root入Queue, 出Queue入Stack, root.Right入Queue, root.Left入Queue......
: 入队列的时候先右后左,从Stack里出来就是从左往右了
: 不知道对不对。

e***s
发帖数: 799
9
没看题目不好意思,回头研究一下。

【在 l****c 的大作中提到】
: 你这样可能无法输出example那样的不同高度分组吧
I*********e
发帖数: 61
10
可以從上往下一行一行的讀,存到一個臨時的vector >,輸出的時候可以
到這輸出這個vector >。不過這恐怕不是題目要求的做法吧?

【在 C***U 的大作中提到】
: 如果是leetcode那个要求的话 你就从上往下走 然后存的时候倒着存就可以了‘啊
:
: nodes

相关主题
leetcode中的binary tree level order traverse II总是有run t我又fail了面试
进入JobHunting版参与讨论
I*********e
发帖数: 61
11
哪位有時間的話能提供一下code?
l****c
发帖数: 782
12
vector > levelOrderBottom(TreeNode *root) {
// Start typing your C/C++ solution below
// DO NOT write int main() function
vector tmp;
stack> result_stack;
tmp.push_back(root);
while(tmp.size()!=0) {
result_stack.push(tmp);
vector cur = tmp;
tmp.clear();
vector::iterator it;
for (it = cur.begin(); it < cur.end(); it++) {
if ((*it)->left!=NULL)
tmp.push_back((*it)->left);
if ((*it)->right!=NULL)
tmp.push_back((*it)->right);
}
}
vector> result;
while(!result_stack.empty()) {
vector cur = result_stack.top();
vector:: iterator it;
vector same_height_node;
for(it = cur.begin(); it < cur.end(); it++)
same_height_node.push_back((*it)->val);
result.push_back(same_height_node);
result_stack.pop();
}
return result;
}
f*********m
发帖数: 726
13
多谢。
C***U
发帖数: 2406
14
为什么不是?

【在 I*********e 的大作中提到】
: 可以從上往下一行一行的讀,存到一個臨時的vector >,輸出的時候可以
: 到這輸出這個vector >。不過這恐怕不是題目要求的做法吧?

d******i
发帖数: 76
15
@lyclyc 的解法很赞, 学习到了,感谢, 有个小bug, root == NULL的情况
看到这个解法,感觉自己的码也太烂了。
我用递归写的,首先得到树的height,然后在对每个height进行递归。
i**********e
发帖数: 1145
16
我贡献一个 Depth-first 递归的解法。
这里注意 ret 是vector, insert() 复杂度是linear to ret.size().
可以改用 double-ended queue 来优化,最后转换回 vector 就好了.
vector > levelOrderBottom(TreeNode *root) {
vector > ret;
traverse(root, 0, ret);
return ret;
}
void traverse(TreeNode *p, int level, vector > &ret) {
if (!p) return;
if (ret.size() <= level) ret.insert(ret.begin(), vector());
traverse(p->left, level+1, ret);
traverse(p->right, level+1, ret);
ret[ret.size() - level - 1].push_back(p->val);
}
e******o
发帖数: 757
17
如果是分层从底部打印到屏幕上而不是打印到vector > 里面有什么更好
的办法么?
1 (共1页)
进入JobHunting版参与讨论
相关主题
leetcode中的binary tree level order traverse II总是有run t我又fail了面试
相关话题的讨论汇总
话题: vector话题: treenode话题: stack话题: level话题: int