递归遍历树
树的基础理论请参考数据结构第五章。因为树本身就是使用了递归定义,因此在解决树的很多问题的时候都可以使用递归方法。
树的中序遍历的定义是:先遍历左子树,然后遍历根节点,最后遍历右子树。因此中序遍历一颗树的方法:
typedef struct _btree
{
int value;
struct _btree *left;
struct _btree *right;
}btree,*pbtree;
void inorder(btree *t)
{
if(t==NULL)
return;
inorder(t->left);//先递归遍历左子树
printf(“%d\n”,t->value);//遍历根节点
inorder(t->right) ;//递归遍历右子树
}
如下图所示,中序遍历图中所示的二叉树时,递归函数调用的关系:当递归调用到叶子结点时,由于叶子结点无左右子树,所以遍历了叶子结点后,下层函数返回后,回到上层的递归函数,把上层的根结点遍历后(中序),再遍历上层根节点的右子树。
因此,在递归中,递归函数是不断嵌套调用自己,当遇到递归出口的时候,再返回到上层函数,一层层返回。