二叉树查找增删改查
来源:互联网 发布:大数据100基金净值查询 编辑:程序博客网 时间:2024/06/18 17:50
#include <stdio.h>#include <string.h>#include <stdlib.h>#ifndef __Tree_Hstruct 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 ;}
0 0
- 二叉树查找增删改查
- 实现二叉树增删改查
- 二叉搜索树的增删查改
- 搜索二叉树的增删查改
- 二叉树的增删改查
- 算法习题1:二叉树实现增删改查
- 二叉树排序及二叉树节点的增删改查(java实现)
- 二叉搜索树Java实现(增删改查遍历等操作)
- JDBC增删改查--数据库增加删除、更新、查找实例
- jqGrid增删改查显示——查找
- JDBC增删改查--数据库增加删除、更新、查找实例
- Ext 树型菜单(增删改查)
- zTree树节点的增删改查。
- hibernate增删查改
- XML 增删查改
- ldap 增删改查
- mysql增删改查
- 动态增删改查
- 南阳oj 题目906 杨辉三角
- 精简Cocos2dx-python环境搭建工程创建过程
- mysql必知必会(二)
- Foundation框架-07 NSFileManager文件操作类
- Java基础恶补——内存泄露、内存溢出
- 二叉树查找增删改查
- Matlab去掉右面、上面的小短线(ticks)
- JDBC数据库连接工具代码与测试简例
- dumpstate uid 由root-->shell
- WordPress插件入口菜单创建的位置代码
- 应用层如何保证一个包的完整性?
- linux使用flock文件锁解决crontab冲突问题
- C++堆和栈区别
- WordPress插件开发实例教程 - 版权插件