IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 数据结构与算法 -> 二叉排序树C语言实现 -> 正文阅读

[数据结构与算法]二叉排序树C语言实现

#include "stdio.h"    
#include "stdlib.h"   

#include "math.h"  
#include "time.h"

#define maxlen 100 /* 存储空间初始分配量 */

typedef int Status;	/* Status是函数的类型,其值是函数结果状态代码,如OK等 */

/* 二叉树的二叉链表结点结构定义 */
typedef  struct Node	/* 结点结构 */
{
	int data;	/* 结点数据 */
	struct BiTNode* lchild, * rchild;	/* 左右孩子指针 */
} Node, * Tree;

int search_tree(Tree T, int key, Tree father, Tree* get)
{
	if (!T)
	{
		*get = father;
		return 0;
	}
	else if(T->data == key)
	{
		*get = T;
		return 1;
	}
	else if(T->data >key)
	{
		search_tree(T->lchild, key, T, get);
	}
	else
	{
		search_tree(T->rchild, key, T, get);
	}
}

int insert(Tree* T, int value)
{
	Tree p, s;
	if (!search_tree(*T, value, NULL, &p))
	{
		s = (Tree)malloc(sizeof(Node));
		s->lchild = NULL;
		s->rchild = NULL;
		s->data = value;
		if (!p)
		{
			*T = s;
		}
		else if(value>p->data)
		{
			p->rchild = s;
		}
		else
		{
			p->lchild = s;
		}
		return 1;
	}
	else
	{
		return 0;
	}
}



int delete_node(Tree *T, int key)
{
	if (!*T)
	{
		return 0;
	}
	else
	{
		if ((*T)->data == key)
		{
			delet(T);
		}
		else if((*T)->data > key)
		{
			delete_node(&(*T)->lchild, key);
		}
		else
		{
			delete_node(&(*T)->rchild, key);
		}
		return 1;
	}
}

int insert1(Tree* T, int value)
{
	Tree p, s;
	if (*T == NULL)  //根节点
	{
		*T= (Tree)malloc(sizeof(Node));
		(*T)->data = value;
		(*T)->lchild = NULL;
		(*T)->rchild = NULL;
	}
	else if(value < (*T)->data)
	{

		if ((*T)->lchild == NULL)   //如果没有左孩子,直接将值赋给左孩子
		{
			p = (Tree)malloc(sizeof(Node));  //这已经给他的左右孩子分配了内存地址,所以要将他的左右孩子只想NULL
			p->lchild = NULL;
			p->rchild = NULL;
			p->data = value;
			(*T)->lchild = p;
			return 1;
		}


		else
		{
			insert1(&((*T)->lchild), value);
		}

	}

	else if(value > (*T)->data)
	{
		if ((*T)->rchild == NULL)   //如果没有左孩子,直接将值赋给左孩子
		{
			s = (Tree)malloc(sizeof(Node));
			   //这已经给他的左右孩子分配了内存地址,所以要将他的左右孩子只想NULL
			s->lchild = NULL;
			s->rchild = NULL;

			s->data = value;
			(*T)->rchild = s;
			return 1;
		}


		else
		{
			insert1(&((*T)->rchild), value);
		}
	}
	else
	{
		return 0;
	}
	return 1;

}

int delet(Tree* T)
{
	Tree q, s;
	if ((*T)->lchild == NULL && (*T)->rchild == NULL)
	{
		*T = NULL;
		free(*T);
	}
	else if((*T)->lchild == NULL)
	{
		q = *T;
		*T = (*T)->rchild;
		free(q);
	}
	else if ((*T)->rchild == NULL)
	{
		q = *T;
		*T = (*T)->lchild;
		free(q);
	}
	else
	{
		q = *T;
		s = q->lchild;
		while (s->rchild)
		{
			q = s; //指向最终s的父母节点
			s = s->rchild;
		}
		(*T)->data = s->data;
		if(q!=*T)  //若T节点左子节点没有子右节点
			q->rchild = s->lchild;
		else
		{
			q->lchild = s->lchild;
		}
		free(s);

	}
	return 1;
}

int in_see(Tree T)
{
	if (!T)
	{
		return 0;
	}
	in_see(T->lchild);
	printf("%d ", T->data);
	in_see(T->rchild);
	return 1;
}

int main(void)
{
	int i;
	int a[10] = { 62,88,58,47,35,73,51,99,37,93 };
	Tree T = NULL;

	for (i = 0;i < 10;i++)
	{
		insert(&T, a[i]);
	}
	in_see(T);
	printf("\n");
	delete_node(&T, 93);
	in_see(T);
	printf("\n");
	delete_node(&T, 47);
	in_see(T);
	printf("\n");
	return 0;
}

  数据结构与算法 最新文章
【力扣106】 从中序与后续遍历序列构造二叉
leetcode 322 零钱兑换
哈希的应用:海量数据处理
动态规划|最短Hamilton路径
华为机试_HJ41 称砝码【中等】【menset】【
【C与数据结构】——寒假提高每日练习Day1
基础算法——堆排序
2023王道数据结构线性表--单链表课后习题部
LeetCode 之 反转链表的一部分
【题解】lintcode必刷50题<有效的括号序列
上一篇文章      下一篇文章      查看所有文章
加:2022-05-07 11:22:23  更:2022-05-07 11:23:00 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/26 3:35:49-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码