数据结构

数据结构先序遍历,求解释
这是课本129页的例题,三个if递进的话如果某个结点没有左子树有右子树,那右子树不就不能遍历了吗?
还有这三个return把我搞糊涂了,请明白的讲一下,谢谢啦
status preOrderTraverse(biTree T,ststus(*visit)(tElemType e)){
if(T){
if(visit(T->data))
if(preOrderTraverse(T->lchild,visit))
if(preOrderTraverse(T->rchild,visit))return OK;
return ERROR;
}else return OK;
}
有简单的解释吗

因为这个遍历里面的遍历函数preOrderTraverse 和访问结点函数visit都有返回值来确定过程中间是否出错了,凡是中间哪个环节出了错,后面的遍历就不再进行了,下面是按控制结构缩进重排了的:

可以和都没返回值的对比一下:

追问

能给我解释下怎么递归的吗。我都不知道四个if一个else怎么执行的。

追答

条件为真(返回OK)就可以继续往下执行,不是后面的就再不执行了,对照下面的那个应该一看就清楚了的

追问

是不是按照你那个结构这么排,就和C语言那种一个if对应一个else不一样。只要不满足就return error

追答

其实老实说,那个排的有点错误,那个最里面的else应该是和最后一个if配对的

追问

不就一个else吗。它不是和if(T)的if配对吗。。我都不知道你说的什么意思。了而且你说哪个环节出错,后面不在遍历。那左子空就不遍历右子了??

温馨提示:答案为网友推荐,仅供参考
第1个回答  2019-11-13
相似回答