|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
最近在学习二叉树非递归中序遍历,盗来的代码如下:
上面是一个可执行的代码,我自己加了点注释,不知对否。接下来我的问题如下:
①inorderbitree函数为什么不能改为如下代码:
- void inorderbitree(BiTree T) //中序遍历,非递归 没有改变树的结构 没必要用指针
- {
- BiTree p=T;
- Sqstack *S=NULL;
- initstack(S);//初始化栈,构造结点
- while(p||!emptystack(S))
- {
- if(p) //一直遍历到左子树的最下边 便遍历边入栈
- {
- push(S,p);
- p=p->lchild;
- }
- else //当p为空时,说明已经到达左子树最下边,此时需要出栈,并打印该结点
- {
- pop(S,&p);
- printf("%c",p->data);
- p=p->rchild; //进入右子树
- }
- }
- }
复制代码
即把S定义为Sqstack类型的指针,这样的话在调用函数的时候可以直接写S而不是&S。但是不能成功运行,为何?
②CreatBitree函数中的scanf是如何做到直接输入一行字符便可执行,而不是需要输入一个字符按一次回车?(是不是和递归有关?本人对递归不是很了解。。)
本人小白,最近因为比较忙对学习一直朝三暮四,但会尽快恢复状态。如果我的问题有蠢到各位或者有哪些知识点没有学好的地方,恳请各位指正!
在这里先谢谢各位dalao!如有更好的学习建议请各位指出!
PS:严蔚敏的数据结构太晦涩难懂了。
|
|