对不起,昨天晚上太累,做得没心机,刚才起来又看了一下,原来while循环并没有问题,就是最后一个"#"时发生top=-1的情况,导致s数组溢出,如下改动:
else { if(top!=0) //加个判断就可以了,昨天晚上不好意思 top--; while(s[top]->right!=NULL) { top--; }
对不起,昨天晚上太累,做得没心机,刚才起来又看了一下,原来while循环并没有问题,就是最后一个"#"时发生top=-1的情况,导致s数组溢出,如下改动:
else { if(top!=0) //加个判断就可以了,昨天晚上不好意思 top--; while(s[top]->right!=NULL) { top--; }
我再用第二个例子调试一次,发现top还出现溢出的情况,再跟踪调试,溢出发生在while里面,这次再加一个判断,如下:
while(s[top]->right!=NULL&&top!=0) { top--; }
这样,在两个判断的作用下,就再也不会溢出了。
再次为昨天晚上的不耐烦道歉,希望你能看到此帖和不要对论坛不信任。
修改后的case '#'的完整如下:
case '#': if(k==1){k=2;} else { if(top!=0) //判断一次 top--; while(s[top]->right!=NULL&&top!=0) //再判断一次 { top--; }
} break;
live41斑竹,
真的 很感谢你的帮助,有你这么好的斑竹,真是这个论坛的幸福!
while(s[top]->right!=NULL&&top!=0)这个语句我也想到过,但还是错了,没想到在他前面还要一句
if(top!=0) //判断一次 top--;
我对我的错误了解的很清楚了,真的很感谢!! 还有个小问题:你说的
“我再用第二个例子调试一次,发现top还出现溢出的情况,再跟踪调试,溢出发生在while里面”
你是怎么 调试的,怎么发现top有溢出的,怎么发现是在 while循环里的??
你用VC6吧?你运行时应该是按那个感叹号的按钮吧?你看到感叹号按钮右边有两个按钮吗?
例如:你写好了一个文件,按Build(F7)按钮后感叹号按钮会激活,同时它右边两个按钮也激活,最右边的是设置断点位置(Insert/Remove BreakPoint (F9)),另外一个就是跟踪调试按钮(Go (F5))。具体怎么用,你自己先试一下,不懂再问我。
[此贴子已经被作者于2004-11-13 14:19:50编辑过]
谢谢 ,懂了 。跟踪调试按钮(Go (F5)),这么好的好东西怎么不早告诉我!
设置断点位置(Insert/Remove BreakPoint (F9)),自己用用 应该就懂了。
“静哥” 难道 比你还厉害,干吗要被他骂?
I have not understand what do you want realize.
Can you explain it? 先序、中序、后序 what is the principle ?
I have noticed that you have used new to create memory place, but where is delete???
kai,我倒,干嘛用英文?你台机没中文吗?他的代码漏了析构函数没写。
遍历的方法三种,全部递归。。。看不懂你问什么。