题目一
编写递归算法,在二叉树中求位于先序序列中第k个位置的结点的值
思想
声明一个order用来计数,先序遍历,每遍历一个结点order+1,然后判断k是否等于order,等于则将结点的值域赋给e
代码
Status T641(BiTree T,TElemType *e, int *order,int k)
{
if(T)
{
(*order)++;
if(*order==k)
{
*e=T->data;
return OK;
}
else
{
if(T641(T->lchild,e,order,k))
return OK;
if(T641(T->rchild,e,order,k))
return OK;
}
}
return ERROR;
}
题目二
编写递归算法,计算二叉树中叶子结点的数目
思想
叶子结点的特点是没有子结点,可以遍历二叉树然后每个结点判断是否满足条件,满足则加一;这个代码段是先序递归。
代码
Status T642(BiTree T)
{
int count=0;
if(T)
{
if(T->lchild==NULL&&T->rchild==NULL)
count++;
else
{
count+=T642(T->lchild);
count+=T642(T->rchild);
}
}
return count;
}
题目三
编写递归算法,将二叉树中所有结点的左右子树相互交换
思想
代码非常简单,不做过多解释
代码
void T643(BiTree T)
{
BiTree p;
if(T)
{
p=T->lchild;
T->lchild=T->rchild;
T->rchild=p;
T643(T->lchild);
T643(T->rchild);
}