查找二叉树的操作
2015-06-29 00:10
260 查看
#include<stdio.h> #include<stdlib.h> typedef int Elemtype; typedef struct TreeNode *SearchTree; typedef struct TreeNode *position; struct TreeNode { Elemtype Element; SearchTree Left; SearchTree Right; }; /*建立一颗空树*/ SearchTree MakeEmpty(SearchTree T) { if(T != NULL) { MakeEmpty(T->Left); MakeEmpty(T->Right); free(T); } return NULL; } /*查找树中最小的值所在的位置*/ position FindMin(SearchTree T) { if(T == NULL) return NULL; if(T->Left) return FindMin(T->Left); else return T; } /*查找树中最大的值所在的位置*/ position FindMax(SearchTree T) { if(T == NULL) return NULL; if(T->Right) return T->Right; else return T; } /*插入结点*/ SearchTree Insert(SearchTree T,Elemtype x) { if(T == NULL) { T = (SearchTree)malloc(sizeof(struct TreeNode)); if(!T) { printf("Out of space\n"); exit(1); } T->Element = x; T->Left = T->Right = NULL; } else { if(x > T->Element) T->Right = Insert(T->Right,x); else if(x < T->Element) T->Left = Insert(T->Left,x); } return T; } /*删除结点*/ SearchTree Delete(SearchTree T,Elemtype x) { if(T == NULL) printf("Element not found\n"); else if(x < T->Element) T->Left = Delete(T->Left,x); else if(x > T->Element) T->Right = Delete(T->Right,x); else { if(T->Left&&T->Right) { T = FindMax(T->Right); Delete(T->Right,T->Element); } else { SearchTree TmpNode; TmpNode = T; if(T->Left) T = T->Left; else T = T->Right; free(TmpNode); } } return T; } /*中序输出查找二叉树*/ void PrintSearchTree(SearchTree T) { if(T->Left) PrintSearchTree(T->Left); if(T) printf("%d ",T->Element); if(T->Right) PrintSearchTree(T->Right); } /*测试*/ int main(void) { int n; SearchTree T = NULL; T = MakeEmpty(T); while(scanf("%d",&n)!=EOF) { if(n == 0) break; T = Insert(T,n); } PrintSearchTree(T); printf("\n输去你想删除的结点\n"); scanf("%d",&n); T = Delete(T,n); PrintSearchTree(T); return 0; }
相关文章推荐
- LeetCode——Sqrt(x)
- 【Leetcode】Reversed Linked List
- UVA 550 Multiplying by Rotation (简单递推)
- Java基础:泛型及其擦除性、不可协变性
- hdu2005 关于输入的技巧及初始化问题
- 内存和FLASH的区别
- JavaScript写一个小乌龟推箱子游戏
- hadoop 流streaming跑python程序
- effective c++ 记录之对象切割问题
- 一个用 C 语言写的迷你版 2048 游戏,只有 500个字符
- SQL注入的攻击与防御(简单篇)
- C++标准异常类
- php页面静态化—触发系统生成纯静态化页面的三种方式
- The-Swift-2.0-Programming-Language-playground
- 收藏:Javascript 脚本的调试经验
- Java 容器
- 【吾日三省吾身】2015.6.28-涅槃行动第四十一天
- 如何从 Linux 上连接到远程桌面
- MAC 密钥散列算法
- Shell脚本实现的基于SVN的代码提交量统计工具