由买买提看人间百态

boards

本页内容为未名空间相应帖子的节选和存档,一周内的贴子最多显示50字,超过一周显示500字 访问原贴
JobHunting版 - 遇到了一个很奇怪的C++问题
相关主题
请教大家一个问题:Maximum Height (Depth) of a Binary Tree Using PreOrder Traversal问个C的基本问题
leetcode 一题java知道一个reference怎么删掉它指向的内存空间?
弱问一个小问题,leetcode 上merge sorted list请问这两个 java 语句有什么区别?
MS onsite 面经请教下个sscanf正则表达式逗号隔开赋值的问题
请教大家一个问题:Maximum Height (Depth) of a Binary Tree Using PreOrder Traversal请大家 看看这个 Merge k Sorted Lists (Java), 我不太明白
G家实习电面总结一道onsite面试题
Tree Question: Longest path from root to a leafBloomberg on campus interview
白痴问题:TreeNode 里面有指向 parent 的指针么?pointer 和reference的区别
相关话题的讨论汇总
话题: cur话题: null话题: prev话题: left话题: maxheight
进入JobHunting版参与讨论
1 (共1页)
r**h
发帖数: 1288
1
直接使用st.push(cur->left);将左子树节点入栈
和先赋值cur = cur->left; 再st.push(cur);
结果竟然是不一样的
找了半天找不到bug,结果简单替换一下就正常了- -!
真心请教一下,这是为什么呀。。。
p****e
发帖数: 3548
2
全部code贴出来看看
r**h
发帖数: 1288
3
就是循环后序遍历呀
if(prev==NULL || prev->left==cur || prev->right==cur){
if(cur->left != NULL){
st.push(cur->left); <==============
}
else if(cur->right != NULL){
st.push(cur->right); <==============
}
}
大概像这样
箭头指着的地方换成一开始的写法就不行了

【在 p****e 的大作中提到】
: 全部code贴出来看看
r**h
发帖数: 1288
4
class Solution {
public:
int maxDepth(TreeNode *root) {
if(root == NULL) return 0;
stack st;
st.push(root);
TreeNode *prev=NULL, *cur;
int maxHeight = 0;

while(st.size()>0){
cur = st.top();
if(prev==NULL || prev->left==cur || prev->right==cur){
if(cur->left != NULL){
st.push(cur->left);
}
else if(cur->right != NULL){
st.push(cur->right);
}
}
else if(cur->left == prev){
if(cur->right != NULL){
st.push(cur->right);
}
}
else{
st.pop();
}
if(st.size() > maxHeight){
maxHeight = st.size();
}
prev = cur;
}
return maxHeight;
}
};
完整代码是这样的
p****e
发帖数: 3548
5
当然不对了,后面你有
prev = cur;
如果你修改了cur的值,结果就不一样了。。

【在 r**h 的大作中提到】
: class Solution {
: public:
: int maxDepth(TreeNode *root) {
: if(root == NULL) return 0;
: stack st;
: st.push(root);
: TreeNode *prev=NULL, *cur;
: int maxHeight = 0;
:
: while(st.size()>0){

r**h
发帖数: 1288
6
但是我就是直接替换的呀

if(cur->left != NULL){
cur = cur->left;
st.push(cur);
}
换成
if(cur->left != NULL){
st.push(cur->left);
}
应该不存在cur的值被改变的问题吧?

【在 p****e 的大作中提到】
: 当然不对了,后面你有
: prev = cur;
: 如果你修改了cur的值,结果就不一样了。。

L********e
发帖数: 159
7
替换前后cur的值不一样呀,一个是cur另一个是cur->left

【在 r**h 的大作中提到】
: 但是我就是直接替换的呀
: 将
: if(cur->left != NULL){
: cur = cur->left;
: st.push(cur);
: }
: 换成
: if(cur->left != NULL){
: st.push(cur->left);
: }

r**h
发帖数: 1288
8
哦哦。。。突然理解了!!
是因为cur值改变导致后面prev得不到正确的值了
哎我真粗心

【在 L********e 的大作中提到】
: 替换前后cur的值不一样呀,一个是cur另一个是cur->left
1 (共1页)
进入JobHunting版参与讨论
相关主题
pointer 和reference的区别请教大家一个问题:Maximum Height (Depth) of a Binary Tree Using PreOrder Traversal
问个C++ ctor的问题G家实习电面总结
问个关于java和C++的问题Tree Question: Longest path from root to a leaf
C语言高手帮我看看下面代码,哪里错了啊,谢了白痴问题:TreeNode 里面有指向 parent 的指针么?
请教大家一个问题:Maximum Height (Depth) of a Binary Tree Using PreOrder Traversal问个C的基本问题
leetcode 一题java知道一个reference怎么删掉它指向的内存空间?
弱问一个小问题,leetcode 上merge sorted list请问这两个 java 语句有什么区别?
MS onsite 面经请教下个sscanf正则表达式逗号隔开赋值的问题
相关话题的讨论汇总
话题: cur话题: null话题: prev话题: left话题: maxheight