在Dev-C++中先按先序遍历建立一棵二叉树,再编写交换左右子树和统计叶子结点个数的算法程序,利用struct BiTNode
时间: 2024-03-11 12:48:20 浏览: 69
由c++实现的二叉树的建立与遍历
4星 · 用户满意度95%
来表示二叉树节点。
好的,我会尽力回答你的问题。以下是代码实现:
```
#include <stdio.h>
#include <stdlib.h>
typedef struct BiTNode {
char data;
struct BiTNode* lchild;
struct BiTNode* rchild;
} BiTNode, *BiTree;
// 先序遍历建立二叉树
void CreateBiTree(BiTree* T) {
char c;
scanf("%c", &c);
if (c == ' ') {
*T = NULL;
} else {
*T = (BiTree)malloc(sizeof(BiTNode));
(*T)->data = c;
CreateBiTree(&(*T)->lchild);
CreateBiTree(&(*T)->rchild);
}
}
// 交换左右子树
void SwapChild(BiTree T) {
if (T == NULL) {
return;
}
BiTree temp = T->lchild;
T->lchild = T->rchild;
T->rchild = temp;
SwapChild(T->lchild);
SwapChild(T->rchild);
}
// 统计叶子节点个数
int CountLeaf(BiTree T) {
if (T == NULL) {
return 0;
} else if (T->lchild == NULL && T->rchild == NULL) {
return 1;
} else {
return CountLeaf(T->lchild) + CountLeaf(T->rchild);
}
}
int main() {
BiTree T;
printf("请输入先序遍历序列,空格表示空节点:\n");
CreateBiTree(&T);
printf("交换左右子树前的先序遍历序列为:\n");
printf("%c ", T->data);
SwapChild(T);
printf("\n交换左右子树后的先序遍历序列为:\n");
printf("%c ", T->data);
printf("\n叶子节点个数为:%d\n", CountLeaf(T));
return 0;
}
```
你可以将这段代码复制到 Dev-C++ 中运行,输入先序遍历序列,空格表示空节点,即可得到交换左右子树后的先序遍历序列和叶子节点个数。
阅读全文