以二叉链表作为二叉树的存储结构,利用c语言编写以下算法: (1)统计二叉树的叶结点个数 (2)判断两棵二叉树是否相等 (3)交换二叉树每个结点的左孩子和右孩子 (4)按照层序遍历二叉树,统计树中度为1的结点个数
时间: 2023-10-18 18:17:38 浏览: 249
编写一个将二叉树中每个结点的左右孩子交换的算法。
以下是四个算法的C语言实现:
(1) 统计二叉树的叶结点个数
```c
int count_leaf(BiTree T){
if(T==NULL){
return 0;
}
if(T->lchild==NULL && T->rchild==NULL){
return 1;
}
return count_leaf(T->lchild)+count_leaf(T->rchild);
}
```
(2) 判断两棵二叉树是否相等
```c
int is_equal(BiTree T1, BiTree T2){
if(T1==NULL && T2==NULL){
return 1;
}
if(T1==NULL || T2==NULL){
return 0;
}
if(T1->data!=T2->data){
return 0;
}
return is_equal(T1->lchild,T2->lchild) && is_equal(T1->rchild,T2->rchild);
}
```
(3) 交换二叉树每个结点的左孩子和右孩子
```c
void swap_lr(BiTree T){
if(T==NULL){
return;
}
BiTree temp=T->lchild;
T->lchild=T->rchild;
T->rchild=temp;
swap_lr(T->lchild);
swap_lr(T->rchild);
}
```
(4) 按照层序遍历二叉树,统计树中度为1的结点个数
```c
int count_degree_1(BiTree T){
if(T==NULL){
return 0;
}
int count=0;
Queue Q;
InitQueue(&Q);
EnQueue(&Q,T);
while(!QueueEmpty(Q)){
BiTree node=DeQueue(&Q);
if((node->lchild==NULL && node->rchild!=NULL) || (node->lchild!=NULL && node->rchild==NULL)){
count++;
}
if(node->lchild!=NULL){
EnQueue(&Q,node->lchild);
}
if(node->rchild!=NULL){
EnQueue(&Q,node->rchild);
}
}
return count;
}
```
阅读全文