数据结构先序遍历,求解释
这是课本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配对吗。。我都不知道你说的什么意思。了而且你说哪个环节出错,后面不在遍历。那左子空就不遍历右子了??