在Dev-C++中先按先序遍历建立一棵二叉树AB#DC,再编写交换左右子树和统计叶子结点个数的算法程序,利用struct BiTNode{int data;Struct BiTNode *lchild,*rchild;}BiTNode,*BiTree
时间: 2024-03-11 16:51:33 浏览: 47
好的,我可以为你解答这个问题。首先,根据给出的先序序列AB#DC,我们可以构建出如下的二叉树:
```
A
/ \
B C
\
D
```
接下来,我们可以按照以下步骤编写交换左右子树和统计叶子结点个数的算法程序:
1. 定义二叉树节点结构体
```c++
struct BiTNode {
int data;
struct BiTNode *lchild, *rchild;
};
typedef struct BiTNode BiTNode, *BiTree;
```
2. 构建二叉树
```c++
void createTree(BiTree &T) {
char ch;
cin >> ch;
if (ch == '#') {
T = NULL;
} else {
T = new BiTNode;
T->data = ch;
createTree(T->lchild);
createTree(T->rchild);
}
}
```
3. 交换左右子树
```c++
void swapTree(BiTree &T) {
if (T != NULL) {
swapTree(T->lchild);
swapTree(T->rchild);
BiTNode *tmp = T->lchild;
T->lchild = T->rchild;
T->rchild = tmp;
}
}
```
4. 统计叶子节点个数
```c++
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);
}
}
```
最后,我们可以在主函数中调用这些函数来实现完整的程序:
```c++
int main() {
BiTree T;
createTree(T);
swapTree(T);
int leafNum = countLeaf(T);
cout << "交换左右子树后,叶子节点个数为:" << leafNum << endl;
return 0;
}
```
希望这个程序能够帮助到你!
阅读全文