在Dev-C++中先按先序遍历建立一棵二叉树,再编写交换左右子树和统计叶子结点个数的算法程序,利用struct BiTNode
时间: 2024-03-11 08:49:00 浏览: 25
来表示二叉树节点。
好的,我理解了你的问题。这是一个关于二叉树的算法问题。下面是代码实现:
```c
#include <stdio.h>
#include <stdlib.h>
// 定义二叉树节点结构体
typedef struct BiTNode {
char data;
struct BiTNode *lchild, *rchild;
} BiTNode, *BiTree;
// 先序遍历建立二叉树
void CreateBiTree(BiTree *T) {
char ch;
scanf("%c", &ch);
if (ch == '#') {
*T = NULL;
} else {
*T = (BiTNode *) malloc(sizeof(BiTNode));
(*T)->data = ch;
CreateBiTree(&((*T)->lchild));
CreateBiTree(&((*T)->rchild));
}
}
// 交换左右子树
void SwapBiTree(BiTree T) {
if (!T) {
return;
}
BiTree temp = T->lchild;
T->lchild = T->rchild;
T->rchild = temp;
SwapBiTree(T->lchild);
SwapBiTree(T->rchild);
}
// 统计叶子结点个数
int CountLeafNode(BiTree T) {
if (!T) {
return 0;
} else if (!T->lchild && !T->rchild) {
return 1;
} else {
return CountLeafNode(T->lchild) + CountLeafNode(T->rchild);
}
}
int main() {
BiTree T;
printf("请输入先序遍历序列(#表示空节点):\n");
CreateBiTree(&T);
printf("交换左右子树后的二叉树:\n");
SwapBiTree(T);
printf("叶子结点个数为:%d\n", CountLeafNode(T));
return 0;
}
```
你可以把代码复制到Dev-C++中运行,输入先序遍历序列,并查看交换左右子树和叶子结点个数的结果。