1.编写算法实现二叉树T的按层遍历。(二叉树采用二叉链表存储)
#define OK 1
#define ERROR 0
typedef int Status;
typedef struct BiTNode{
TElemType data;
struct BiTNode *lchile, *rchild;
}BiTNode, *BiTree;
Status LayerTraverse(BiTree T, Status (*visit)(TElemType e)){
if(!T) return OK;
InitQueue(Q);
EnQueue(Q,T);
while(!QueueEmpty(Q))
{
DeQueue(Q,p);
if(!(*visit)(p->data)) return ERROR;
if(p->lchild) EnQueue(Q,p->lchild);
if(p->rchild) EnQueue(Q,p->rchild);
}
return OK;
}
2.编写算法实现对二叉树T交换左右子树的操作。(二叉树采用二叉链表存储) 参考算法: 符号常量和类型的定义及二叉链表的存储表示如 1题。
Status Exchange(Bitree &T)
{
if(!T) return OK;
p=T->lchild; T->lchild=T-rchild; T->rchild=p;
Exchange(T->lchild);
Exchange(T->rchild);
return OK;
}
3.编写算法实现统计并返回二叉树T的叶子结点的数目的操作。(二叉树采用二叉链表存储) 参考算法: 符号常量和类型的定义及二叉链表的存储表示如第1题。
int Countleaf(Bitree T)
{
if(!T) return 0;
if(T->lchild==NULL&&T->rchild==NULL) return 1;
return(Countleaf(T->lchild)+Countleaf(T->rchild));
}
4.编写算法实现计算并返回二叉树T的深度。(二叉树采用二叉链表存储) 参考算法: 符号常量和类型的定义及二叉链表的存储表示如第1题
int BitreeDepth(BiTree T)
{
if(!T)
return 0;
else{
left=BitreeDepth(T->lchild);
right=BitreeDepth(T->rchild);
return( left>right?left+1:right+1);
}
}
|