C语言递归遍历二叉树

void preorder(binTree bt){
if(bt!=NULL){
printf("%c",bt->data);
preorder(bt->lchild);

}
}
上面的没打完
前序遍历
void preorder(binTree bt){

if(bt!=NULL){
printf("%c",bt->data);
preorder(bt->lchild); //遍历左子树
preorder(bt->rchild);//遍历右子树
}
}
这样程序执行顺序什么样的.没怎么学过C语言. 按我的理解 这个程序执行到第一个递归不就回到头了吗,右子树不是遍历不到吗?

void preorder(binTree bt){

if(bt!=NULL) //如果到了叶子后(bt=null),就结束函数调用
{
    printf("%c",bt->data); //先输出节点内容
    preorder(bt->lchild); //调用函数,去遍历当前节点的左子树
    preorder(bt->rchild);//上面左树执行完成后,调用函数,去遍历当前节点的右子树
}
}
以上代码,就是递归的特点,和语言无关

追问

意思就是C语言 在第一个递归完成后,回到第一个递归再顺序向下执行?
访问头结点,
访问头结点的 左子树
访问左子树的左子树
...左子树的左子树的左子树...
直到为NULL 是不是这样
不是很清楚 我可以再增加悬赏,麻烦了

追答

是的,就是你理解的这样,当所有的左树遍历完成后,会逐级的把对应层的该“大”树上的右树遍历完成。关于遍历,自己画一下图就清楚理解了。
递归 的概念,首次接触时,不容易理解,容易陷入思维死角,看代码时,要从方法上去理解,宏观上去理解。
递归程序的写法,1、要有结束条件 , 如 if ( bt != NULL ) ,结束条件就是bt=null
2、调用 相同的方法(直接调用函数自己,或间接调用)去处理下一级的问题。
重点:程序都是顺序执行的,执行完某一句,就会去执行下一句。

追问

谢谢

温馨提示:答案为网友推荐,仅供参考