第六章
PE06
/**********
【题目】若两棵二叉树T1和T2皆为空,或者皆不空
且T1的左、右子树和T2的左、右子树分别相似,则
称二叉树T1和T2相似。试编写算法,判别给定两棵
二叉树是否相似。
二叉链表类型定义:
typedef struct BiTNode {
TElemType data;
struct BiTNode *lchild, *rchild;
} BiTNode, *BiTree;
**********/
Status Similar(BiTree T1, BiTree T2)
/* 判断两棵二叉树是否相似的递归算法 */
{
if(T1==NULL&&T2==NULL)
return TRUE;
else if(T1==NULL||T2==NULL)
return FALSE;
if(Similar(T1->lchild,T2->lchild)&&Similar(T1->rchild,T2->rchild))
return TRUE;
else return FALSE;
}
PE17
/**********
【题目】编写递归算法,求对二叉树T先序遍历时
第k个访问的结点的值。
二叉链表类型定义:
typedef struct BiTNode {
TElemType data;
struct BiTNode *lchild, *rchild;
} BiTNode, *BiTree;
**********/
TElemType PreOrder(BiTree T, int &rek){
TElemType re = '#';
if(T == NULL)
return '#';
if(rek == 1)
return T -> data;
rek--;
if(T -> lchild)
re = PreOrder(T -> lchild, rek);
if(T -> rchild && re == '#')
re = PreOrder(T -> rchild, rek);
return re;
}
TElemType PreOrderK(BiTree T, int k)
/* 求对二叉树T先序遍历时第k个访问的结点的值。*/
/* 若失败,则返回'#' */
{
return PreOrder(T , k);
}
/*
int countNodes(BiTree bt){
return bt?(1 + countNodes(bt->lchild)+countNodes(bt->rchild)):0;
}
TElemType PreOrderK(BiTree T, int k)
{
int count;
if(k <= 0 || !T) return '#';
if(k==1) return T->data;
count = countNodes(T->lchild);
return count >= --k ? PreOrderK(T->lchild,k) : PreOrderK(T->rchild,k-count);
}
*/
PE12
/**********
【题目】编写递归算法,计算二叉树T中叶子结点的数目。
二叉链表类型定义:
typedef struct BiTNode {
TElemType data;
struct BiTNode *lchild, *rchild;
} BiTNode, *BiTree;
**********/
int Leaves(BiTree T)
/* 计算二叉树T中叶子结点的数目 */
{
if(T==NULL)
return 0;
if(T->lchild==NULL&&T->rchild==NULL)
return 1;
return Leaves(T->lchild)+Leaves(T->rchild