(1) 求二叉树结点数目的算法.
typedef struct node
{
char data;
struct node *lchild,*rchild;
}NODE;
int nodenumber(NODE *root)
{
if(root<=NULL)return(0);
else return(1+nodenumber(root->lchild)+nodenuber(root->rchild);
}
(2) 输出二叉树所有叶子的算法.
void showleaves(NODE *root)
{
if(root==NULL)return;
if(root->lchild==NULL&&root->rchild==NULL)
{ printf("%c",root->data);
return;
}
else if(root->lchild!=NULL)showleaves(root->lchid);
if(root->rchild!=NULL)showleaves(root->rchild);
}
(3) 求二叉树深度的算法.
int Treedepth(NODE *root)
{ if(root->NULL)return(-1);
if(root->lchild==NULL&&(root->rchild==NULL)return(0);
else return(Treedepth(root->lchild)>Treedepth(root->rchild)?
(1+Treedepth(root->lchild)):(1+Treedepth(root->rchild));
}
(4) 将树中所有节点的左右子树交换的算法.
void Treeswap(NODE *root)
{
if(root==NULL|(root->lchild==NULL&&root->rchild==NULL)return;
p=root->lchild;
root->lchild=root->rchild;
root->rchild=p;
Treeswap(root->lchild);
Treeswap(root->rchild);
(5) 按层次顺序(同一层次从左到右)遍历二叉树的算法.
void levorder(t,m)
NODE *t;
int m;
{ NODE *q[100],*p;
int head,tail,i;
q[0]=t;
head=0;
tail=1;
while(head<tail)
{ p=q[head++];
printf("%c",p->data);
for(i=0;i<m;i++)]
if(p->child[i]!=NULL)
q[tail++]=p->child[i];
}
}
(6) 复制这棵二叉树的算法.
NODE*copytree(NODE *root)
NODE *p
{ if(root==NULL)return(NULL);
else p=(NODE*)malloc(sizeof(NODE));
p->data=root->data;
p->lchild=copytree(root->lchild);
p->rchild=copytree(root->rchild);
return(p);
}