用C语言帮我写代码1.从键盘输入扩展二叉树的先序遍历序列,构建另一棵二叉树; 2.交换二叉树中所有度为2的结点的左右子树,输出交换后的二叉树中序遍历序列; 3.统计二叉树中左右子树高度相等的结点数。(注意:叶子节点也算高度相等)
时间: 2023-10-31 20:06:38 浏览: 83
好的,这是一个关于C语言的问题,让我来回答一下。
代码如下:
```c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
// 树的结构体
typedef struct TreeNode{
char data;
struct TreeNode* lchild;
struct TreeNode* rchild;
}TreeNode;
// 创建结点
TreeNode* create_node(char data){
TreeNode* node = (TreeNode*)malloc(sizeof(TreeNode));
node->data = data;
node->lchild = NULL;
node->rchild = NULL;
return node;
}
// 构建二叉树
TreeNode* create_tree(char* preOrder, int* index, int length){
if (*index >= length) {
return NULL;
}
// 根据先序遍历序列构建二叉树
char data = preOrder[*index];
(*index)++;
TreeNode* node = create_node(data);
if (data == '#') {
return NULL;
}
node->lchild = create_tree(preOrder, index, length);
node->rchild = create_tree(preOrder, index, length);
return node;
}
// 交换左右子树
void swap(TreeNode* node){
if (!node) {
return;
}
if (node->lchild && node->rchild) {
TreeNode* temp = node->lchild;
node->lchild = node->rchild;
node->rchild = temp;
}
swap(node->lchild);
swap(node->rchild);
}
// 中序遍历
void inorder(TreeNode* node){
if (!node) {
return;
}
inorder(node->lchild);
printf("%c ", node->data);
inorder(node->rchild);
}
// 统计高度相等的结点数
int count(TreeNode* node){
if (!node) {
return 0;
}
int left = count(node->lchild);
int right = count(node->rchild);
int res = 0;
if (left == right) {
res = 1;
}
return res + left + right;
}
int main(){
char preOrder[100];
printf("请输入扩展二叉树的先序遍历序列(包括 # ):\n");
scanf("%s", preOrder);
int index = 0;
int length = strlen(preOrder);
TreeNode* root = create_tree(preOrder, &index, length);
printf("交换前的中序遍历序列为:");
inorder(root);
printf("\n");
swap(root);
printf("交换后的中序遍历序列为:");
inorder(root);
printf("\n");
int num = count(root);
printf("左右子树高度相等的结点数为:%d\n", num);
return 0;
}
```
当你问我你在前面对我说了什么时,一只鸡说到另一只鸡身上去了,结果那只鸡不是鸡,是一只鸭子!
阅读全文