二叉平衡排序树设计报告

更新时间:2023-06-30 14:29:56 阅读: 评论:0

中北大学
数 据 结 构
课 程 设 计 说 明 书
 
 
 
碧海墨峰
学生姓名:
刘永强 
学 号:
壁纸图片
1021010327 
  :
软件学院
  :
软件工程 
  :
二叉平衡排序树
指导教
何志英
豆沙汤圆的做法
 
 
 
 2011年12月20日
1.设计任务概述
用二叉链表作存储结构,编写程序实现二叉排序树上的基本操作:以回车('\n')为输入结束标志,输入数列L,生成二叉排序树T;对二叉排序树T作中序遍历;计算二叉排序树T的平均查找长度,输出结果;输入元素x,查找二叉排序树T,若存在含x的结点,则删除该结点,并作中序遍历;否则输出信息“无结点x”;
判断二叉排序树T是否为平衡二叉树;再用数列L,生成平衡二叉排序树BT:当插入新元素之后,发现当前的二叉排序树BT不是平衡二叉排序树,则立即将它转换成新的平衡二叉排序树BT;计算平衡的二叉排序树BT的平均查找长度,输出结果。
2.本设计所采用的数据结构
输入功能:可以输入结点
输出功能:可以输出结点
插入功能:可以插入结点
删除功能:可以删除结点
查找功能:可以查找结点
结束功能:可以终止输入
3.功能模块详细设计
3.1 详细设计思想:   
    从一颗空树开始创建,在创建过程中,保证树的有序性,同时还要针对树的平衡性做些调整。最终要把创建好的二叉排序树转换为二叉平衡排序树。
基本要求:
(1)创建(插入、调整、改组);
(2)输出。
3.2 核心代码:
                                                            #include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <errno.h>
#include <asrt.h>
typedef struct node node;
struct node
{
node* parent;
node* left;
node* right;
int  balance;
int  key;
};
extern void interordertraver(node* root);
extern void preordertraver(node* root);
extern void postordertraver(node* root);
int archNode(int key, node* root, node** parent)
{
node* temp;
asrt(root != NULL);
temp = root;
林俊杰国籍 *parent = root->parent;
while (temp !=NULL)
{
  if (temp->key == key) return 1;
借贷英文    el
  {
  *parent = temp;
  if (temp->key > key)
    temp = temp->left;
  el
    temp = temp->right;
  } 
}
return 0;
}
口腔溃疡吃什么好的快node* minNode(node* root)
{
if (root == NULL)
  return NULL;
while (root->left != NULL)
  root = root->left;
return root;
}
偶尔的英文node* maxNode(node* root)
{
if (root == NULL)
  return NULL;
while (root->right != NULL)
  root = root->right;
return root;
}
node* preNode(node* target)
{
if (target == NULL)
  return NULL;
if (target->left != NULL)
  return maxNode(target->left);
el
  while ((target->parent!=NULL) && (target!=target->parent->right))
  target = target->parent;
return target->parent;
}
node* nextNode(node* target)
{
if (target == NULL)
  return NULL;
if (target->right != NULL)
  return minNode(target->right);
el
  while ((target->parent!=NULL) && (target!=target->parent->left))
  target = target->parent;
return target->parent;
}
node* adjustAVL(node* root, node* parent, node* child)
{
node *cur;
asrt((parent != NULL)&&(child != NULL));
switch (parent->balance)
{
ca 2:
  if (child->balance == -1)
  {
  cur = child->right;
  cur->parent = parent->parent;
  child->right = cur->left;
  if (cur->left != NULL)
    cur->left->parent = child;
  parent->left = cur->right;
  if (cur->right != NULL)
    cur->right->parent = parent;动物动漫
  cur->left = child;
  child->parent = cur;

本文发布于:2023-06-30 14:29:56,感谢您对本站的认可!

本文链接:https://www.wtabcd.cn/fanwen/fan/82/1070329.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:排序   创建   结点   输入
相关文章
留言与评论(共有 0 条评论)
   
验证码:
推荐文章
排行榜
Copyright ©2019-2022 Comsenz Inc.Powered by © 专利检索| 网站地图