c语言代码 1.通过输入数据,建立一个排序二叉树;每输入一个数据重新显示二叉树的结构。 2.输入完毕后,对排序二叉树进行中序遍历,给出排序结果。 *3.对上述二叉树进行改进成平衡二叉树; 并说明具体的输入方式从而正确运行程序

时间: 2024-01-24 09:16:58 浏览: 25
以下是C语言代码,实现了输入数据建立排序二叉树、重新显示二叉树结构、中序遍历排序、将排序二叉树转换为平衡二叉树的功能。 ``` #include <stdio.h> #include <stdlib.h> //定义二叉树节点结构体 typedef struct BiTNode{ int data; struct BiTNode *lchild, *rchild; }BiTNode, *BiTree; //函数声明 void insert(BiTree *T, int data); //插入节点 void inOrder(BiTree T); //中序遍历 int getHeight(BiTree T); //获取树的高度 void rotateLL(BiTree *T); //左旋转 void rotateRR(BiTree *T); //右旋转 void rotateLR(BiTree *T); //左右旋转 void rotateRL(BiTree *T); //右左旋转 void balance(BiTree *T); //平衡二叉树 int main(){ BiTree root = NULL; //初始化二叉树为空 printf("请输入数据,以-1结束:\n"); int data; while(1){ scanf("%d", &data); if(data == -1){ break; } insert(&root, data); inOrder(root); printf("\n"); } printf("排序结果:"); inOrder(root); printf("\n"); balance(&root); printf("平衡二叉树中序遍历结果:"); inOrder(root); printf("\n"); return 0; } //插入节点 void insert(BiTree *T, int data){ if(!(*T)){ //空树,新建节点 *T = (BiTree)malloc(sizeof(BiTNode)); (*T)->data = data; (*T)->lchild = NULL; (*T)->rchild = NULL; } else{ //非空树,插入节点 if(data < (*T)->data){ //插入左子树 insert(&((*T)->lchild), data); } else{ //插入右子树 insert(&((*T)->rchild), data); } } } //中序遍历 void inOrder(BiTree T){ if(T){ inOrder(T->lchild); printf("%d ", T->data); inOrder(T->rchild); } } //获取树的高度 int getHeight(BiTree T){ if(!T){ return 0; } int leftHeight = getHeight(T->lchild); int rightHeight = getHeight(T->rchild); return leftHeight > rightHeight ? leftHeight + 1 : rightHeight + 1; } //左旋转 void rotateLL(BiTree *T){ BiTree p = (*T)->lchild; (*T)->lchild = p->rchild; p->rchild = (*T); (*T) = p; } //右旋转 void rotateRR(BiTree *T){ BiTree p = (*T)->rchild; (*T)->rchild = p->lchild; p->lchild = (*T); (*T) = p; } //左右旋转 void rotateLR(BiTree *T){ rotateRR(&((*T)->lchild)); rotateLL(T); } //右左旋转 void rotateRL(BiTree *T){ rotateLL(&((*T)->rchild)); rotateRR(T); } //平衡二叉树 void balance(BiTree *T){ if(!(*T)){ return; } int leftHeight = getHeight((*T)->lchild); int rightHeight = getHeight((*T)->rchild); if(leftHeight - rightHeight >= 2){ //左子树高度大于右子树高度 int leftLeftHeight = getHeight((*T)->lchild->lchild); int leftRightHeight = getHeight((*T)->lchild->rchild); if(leftLeftHeight >= leftRightHeight){ //左子树的左子树高度大于等于左子树的右子树高度 rotateLL(T); } else{ //左子树的右子树高度大于左子树的左子树高度 rotateLR(T); } } else if(rightHeight - leftHeight >= 2){ //右子树高度大于左子树高度 int rightRightHeight = getHeight((*T)->rchild->rchild); int rightLeftHeight = getHeight((*T)->rchild->lchild); if(rightRightHeight >= rightLeftHeight){ //右子树的右子树高度大于等于右子树的左子树高度 rotateRR(T); } else{ //右子树的左子树高度大于右子树的右子树高度 rotateRL(T); } } balance(&((*T)->lchild)); balance(&((*T)->rchild)); } ``` 输入方式:依次输入数据,以-1结束。例如: ``` 请输入数据,以-1结束: 5 3 7 2 4 6 8 1 -1 ``` 程序会根据输入的数据建立排序二叉树,并在每输入一个数据后重新显示二叉树的结构。输入完毕后,程序会对排序二叉树进行中序遍历,给出排序结果。最后,程序将排序二叉树转换为平衡二叉树,并输出中序遍历结果。

最新推荐

recommend-type

数据结构综合课设二叉树的建立与遍历.docx

从键盘接受输入(先序),以二叉链表作为存储结构,建立二叉树(以先序来建立),并采用递归算法对其进行遍历(先序、中序、后序),将遍历结果打印输出。 3.测试要求: ABCффDEфGффFффф(其中ф表示空格...
recommend-type

C语言数据结构之平衡二叉树(AVL树)实现方法示例

主要介绍了C语言数据结构之平衡二叉树(AVL树)实现方法,结合实例形式分析了C语言平衡二叉树的相关定义与使用技巧,需要的朋友可以参考下
recommend-type

C++ 数据结构二叉树(前序/中序/后序递归、非递归遍历)

主要介绍了C++ 数据结构二叉树(前序/中序/后序递归、非递归遍历)的相关资料,这里提供实例代码来帮助大家理解掌握二叉树,需要的朋友可以参考下
recommend-type

数据结构c语言版建立二叉树,中序非递归遍历(实验报告)

编写程序,用先序递归的方法建立二叉树,建立二叉树后,用中序非递归方法遍历该二叉树,并输出遍历序列。
recommend-type

课设 - 平衡二叉树的演示 .docx

每次插入或删除一个结点后,更新平衡二叉树的显示。 (2) 平衡二叉树的显示采用凹入表现形式。 (3)输入的形式时数字,无论对功能的选择还是对数据的录入,都是以数字的形式进行输入,无需使用文件保存数据。 ...
recommend-type

zigbee-cluster-library-specification

最新的zigbee-cluster-library-specification说明文档。
recommend-type

管理建模和仿真的文件

管理Boualem Benatallah引用此版本:布阿利姆·贝纳塔拉。管理建模和仿真。约瑟夫-傅立叶大学-格勒诺布尔第一大学,1996年。法语。NNT:电话:00345357HAL ID:电话:00345357https://theses.hal.science/tel-003453572008年12月9日提交HAL是一个多学科的开放存取档案馆,用于存放和传播科学研究论文,无论它们是否被公开。论文可以来自法国或国外的教学和研究机构,也可以来自公共或私人研究中心。L’archive ouverte pluridisciplinaire
recommend-type

实现实时数据湖架构:Kafka与Hive集成

![实现实时数据湖架构:Kafka与Hive集成](https://img-blog.csdnimg.cn/img_convert/10eb2e6972b3b6086286fc64c0b3ee41.jpeg) # 1. 实时数据湖架构概述** 实时数据湖是一种现代数据管理架构,它允许企业以低延迟的方式收集、存储和处理大量数据。与传统数据仓库不同,实时数据湖不依赖于预先定义的模式,而是采用灵活的架构,可以处理各种数据类型和格式。这种架构为企业提供了以下优势: - **实时洞察:**实时数据湖允许企业访问最新的数据,从而做出更明智的决策。 - **数据民主化:**实时数据湖使各种利益相关者都可
recommend-type

list根据id查询pid 然后依次获取到所有的子节点数据

可以使用递归的方式来实现根据id查询pid并获取所有子节点数据。具体实现可以参考以下代码: ``` def get_children_nodes(nodes, parent_id): children = [] for node in nodes: if node['pid'] == parent_id: node['children'] = get_children_nodes(nodes, node['id']) children.append(node) return children # 测试数
recommend-type

JSBSim Reference Manual

JSBSim参考手册,其中包含JSBSim简介,JSBSim配置文件xml的编写语法,编程手册以及一些应用实例等。其中有部分内容还没有写完,估计有生之年很难看到完整版了,但是内容还是很有参考价值的。