在Dev-C++中先按先序遍历建立一棵二叉树AB#DC,再编写交换左右子树和统计叶子结点个数的算法完整程序,利用struct BiTNode{int data;Struct BiTNode *lchild,*rchild;}BiTNode,*BiTree
时间: 2024-03-12 15:42:54 浏览: 56
以下是完整程序:
```c++
#include <iostream>
using namespace std;
struct BiTNode {
int data;
struct BiTNode *lchild, *rchild;
};
void createBiTree(BiTNode *&root) {
char ch;
cin >> ch;
if (ch == '#') {
root = NULL;
} else {
root = new BiTNode;
root->data = ch;
createBiTree(root->lchild);
createBiTree(root->rchild);
}
}
void swapChild(BiTNode *&root) {
if (root == NULL) {
return;
}
BiTNode *temp = root->lchild;
root->lchild = root->rchild;
root->rchild = temp;
swapChild(root->lchild);
swapChild(root->rchild);
}
int countLeaves(BiTNode *root) {
if (root == NULL) {
return 0;
}
if (root->lchild == NULL && root->rchild == NULL) {
return 1;
}
return countLeaves(root->lchild) + countLeaves(root->rchild);
}
int main() {
BiTNode *root;
cout << "输入先序遍历序列(#代表空结点):";
createBiTree(root);
cout << "叶子结点个数为:" << countLeaves(root) << endl;
swapChild(root);
cout << "交换左右子树后,叶子结点个数为:" << countLeaves(root) << endl;
return 0;
}
```
程序的思路是:
1. 首先利用递归的方法根据先序遍历序列建立一棵二叉树;
2. 然后递归交换每个结点的左右子树;
3. 最后递归统计叶子结点的个数。
程序中的 `BiTNode` 结构体表示二叉树的结点,包含了结点的数据域 `data` 和指向左右子树的指针 `lchild` 和 `rchild`。`createBiTree` 函数根据输入的先序遍历序列建立一棵二叉树,`swapChild` 函数递归交换每个结点的左右子树,`countLeaves` 函数递归统计二叉树的叶子结点个数。
阅读全文