c**z 发帖数: 669 | 1 vector inorderTraversal(TreeNode *root) {
// IMPORTANT: Please reset any member data you declared, as
// the same Solution instance will be reused for each test case.
vector ret;
stack s;
for( ; ; )
{
if ( root != NULL)
{
s.push(root);
root = root->left;
}
else
{
if ( s.empty())
return ret;
else
{
TreeNode* root = s.top();
s.pop();
ret.push_back(root->val);
root = root->right;
}
}
}
} |
s***e 发帖数: 403 | 2 这怎么可能过呢。你的最后一个else里面root屏蔽了参数root。 |
c**z 发帖数: 669 | 3 楼上能解释下吗
【在 s***e 的大作中提到】 : 这怎么可能过呢。你的最后一个else里面root屏蔽了参数root。
|
s**x 发帖数: 7506 | 4 我感觉可能是 return vector 的问题。 试一试 return vector pointer 什么的。
reserve more space for vector may be important too. |
s***e 发帖数: 403 | 5 完全无关
vector可以返回自己,因为有拷贝构造函数和operator=
而且vector的尺寸可以自动伸缩。
建议LZ学会用gdb调试。这个问题应该很简单。
【在 s**x 的大作中提到】 : 我感觉可能是 return vector 的问题。 试一试 return vector pointer 什么的。 : reserve more space for vector may be important too.
|
c*******2 发帖数: 60 | 6 把最后else里面那个 TreeNode * 去掉? |
p*****3 发帖数: 488 | |
L*********g 发帖数: 8 | 8 自己维护堆栈遍历(non-recursive)时,需要标记已处理过的node, node class应该
加一个标记的属性。否则很容易陷在push, pop node中死循环。
请参考深度遍历的实现。 |
s**x 发帖数: 7506 | 9
Returning a vector might be very expensive due to copy construction of new
object, compilers might optimize it
though. However I am sure when the object is going so large.
I do not see any other issue in the code.
【在 s***e 的大作中提到】 : 完全无关 : vector可以返回自己,因为有拷贝构造函数和operator= : 而且vector的尺寸可以自动伸缩。 : 建议LZ学会用gdb调试。这个问题应该很简单。
|
s**x 发帖数: 7506 | 10
You do not need for tree traversing.
【在 L*********g 的大作中提到】 : 自己维护堆栈遍历(non-recursive)时,需要标记已处理过的node, node class应该 : 加一个标记的属性。否则很容易陷在push, pop node中死循环。 : 请参考深度遍历的实现。
|
|
|
s**x 发帖数: 7506 | 11
=== while(true)
【在 p*****3 的大作中提到】 : ==> for( ; ; ) : 这是个啥...
|
s***e 发帖数: 403 | 12 在这里你还真没啥别的好办法。
返回指针的话你的vector在栈上,退出函数的时候vector对象自动销毁。
返回引用同上,没办法。
要改的话,除非改成vector* ret=new vector;
【在 s**x 的大作中提到】 : : === while(true)
|
s**x 发帖数: 7506 | 13
That what I meant.
【在 s***e 的大作中提到】 : 在这里你还真没啥别的好办法。 : 返回指针的话你的vector在栈上,退出函数的时候vector对象自动销毁。 : 返回引用同上,没办法。 : 要改的话,除非改成vector* ret=new vector;
|
c*********s 发帖数: 385 | 14 In the last nested "else", why did you redefine variable 'root'?
TreeNode* root = s.top();
?? |
c**z 发帖数: 669 | 15 我自己用纸走了一遍,应该能走通的,不知道为什么过不了leet code. 谁有经验的来
说说
To peking3:
while(true) won't compile in VS level 4, in our code standard, we use for( ;
;)
To chern1502:
那个是存储在stack最顶端的节点指针,然后pop()出去
To capricornus:
如果不更新,下次循环就还是原来的值
To sdlx:
我在纸上走了一遍,应该能过的,不知道为什么leet code不让过。 |
c**z 发帖数: 669 | 16 我自己用纸走了一遍,应该能走通的,不知道为什么过不了leet code. 谁有经验的来
说说
To peking3:
while(true) won't compile in VS level 4, in our code standard, we use for( ;
;)
To chern1502:
那个是存储在stack最顶端的节点指针,然后pop()出去
To capricornus:
如果不更新,下次循环就还是原来的值
To sdlx:
我在纸上走了一遍,应该能过的,不知道为什么leet code不让过。 |
c*******2 发帖数: 60 | 17 是要更新, 但不是重新定义,
直接 root = s.top();
如果按照你的, 在else block里的root会屏蔽外面那个root, 出了block就没了吧,然后
下次循环在else block外的root就有问题了.
;
【在 c**z 的大作中提到】 : 我自己用纸走了一遍,应该能走通的,不知道为什么过不了leet code. 谁有经验的来 : 说说 : To peking3: : while(true) won't compile in VS level 4, in our code standard, we use for( ; : ;) : To chern1502: : 那个是存储在stack最顶端的节点指针,然后pop()出去 : To capricornus: : 如果不更新,下次循环就还是原来的值 : To sdlx:
|
c**z 发帖数: 669 | 18 哦,scope不一样的,找到问题了,多谢各位大神 |