#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#ifndef __Tree_H
struct TreeNode;
typedef struct TreeNode *Position;
typedef struct TreeNode *SearchTree ;
struct TreeNode
{
int num ;
};
SearchTree MakeEmpty(SearchTree T) ; //使一棵树变成空树,实现原理,如果不等于NULL,就一级一级的free掉
Position Find(int X, SearchTree T) ; //元素查找函数,实现原理,如果比左子树小,就继续递归查找左子树,如果比右字数大,则
//一直递归右子树,如果此两则条件都不满足的话,就直接返回这个元素了,这样就返回了
Position FindMin(SearchTree T) ; //找到树中最小的值,沿着左子树一直递归,知道next指针为NULL为止
Position FindMax(SearchTree T) ; //找到树中最大的值,沿着右子树一直递归,知道next指针为NULL为止
SearchTree Insert(int X,SearchTree T) ;// 找到一个节点,自身比这个节点的左节点大,比自己的右节点小,如果
//自己比此节点小,则放在左子树的下面,如果自己比此节点大,则放在右边
SearchTree Delete(int X,SearchTree T) ; //删除一个节点,分下面三种情况
//1. 这个节点是树叶,直接将上一级的指针设置为NULL即可
//2. 这个节点只有一个儿子,则绕过这个儿子即可
//3. 这个节点有两个儿子,左边找左边最大的把这个树接上,右边找最小的把这个节点接上
int Retrieve(Position P) ; //检索
SearchTree MakeEmpty(SearchTree T) //让一棵树变成空的树
{
if(T != NULL)
{
MakeEmpty(T->Left) ;
MakeEmpty(T->Right) ;
}
return NULL ;
}
Position Find(int X,SearchTree T) //查找一个二叉树
{
if(T == NULL) return NULL ;
if(X < T->num)
Find(X,T->Left) ;
if(X > T->num)
Find(X,T->Right) ;
return T ;
}
Position FindMin(SearchTree T) //查找一个二叉树中最小的值
{
if(T == NULL) return NULL ;
if(T->left == NULL)
return T ;
return FindMin(T->Left) ;
}
Position FindMax(SearchTree T) ;//查找一个二叉树中最大的值
{
if(T == NULL) return NULL ;
if(T->Right == NULL)
return T ;
return FindMax(T->Right) ;
}
SearchTree Insert(int X,SearchTree T) //插入操作
{//1. 如果是空的链表,则插入
//2.如果小于这个值,则插入到左子树中,如果大于这个值,则插入到右子树中
if(T == NULL) return NULL ;
T = malloc(sizeof(struct node)) ;
if(T == NULL)
FatalError('Out of space') ;
else
{
T->num = X ;
T->left = T->right = NULL ;
}
if(X > T->num)
Insert(X,T->right) ;
else if(X < T->num)
Insert(X,T->left) ;
}
SearchTree Delete(int X,SearchTree T) //
{
if(T == NULL)
return NULL ;
//第一种情况当被查找到的节点是树叶
//第二种情况查找到的树有一个节点
//第三种情况查找到的树有两个节点
//如果什么都没有查到应该返回false
if(X > T->left && X < T->right)
{
TmpCell = FindMin(T->Right) ;
T->num = TmpCell->num ;
T->right = Delete(T->num,T->Right) ;
}
else if(X > T->num)
{
Delete(X,T->right) ;
}
else if(X < T->num)
{
Delete(X,T->left) ;
}
return T ;
}
二叉树查找增删改查
原文作者:二叉查找树
原文地址: https://blog.csdn.net/baixiaoshi/article/details/46823451
本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
原文地址: https://blog.csdn.net/baixiaoshi/article/details/46823451
本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。