1.树节点的典型声明

typedef struct TreeNode *PtrToNode;struct TreeNode{ElementType Element;PtrToNode     FirstChild;PtrToNode     NextSibling;      /* 指向下一个兄弟 */}

2.而叉查找树的实现

#include <stdio.h>
#include <stdlib.h>struct TreeNode;
typedef struct TreeNode *SearchTree;
typedef struct TreeNode *Position;struct TreeNode
{int Element;SearchTree Left;SearchTree Right;
};/* 清空&初始化树 */
SearchTree MakeEmpty(SearchTree T)
{if (T != NULL){   MakeEmpty(T->Left);MakeEmpty(T->Right);free(T);}   return NULL;
}/* 在树中查找x */
Position Find(int x, SearchTree T)
{if (T == NULL)return NULL;if (x < T->Element)return Find(x, T->Left);else if (x > T->Element)return Find(x, T->Right);elsereturn T;
}/* 递归实现 */
Position FindMin(SearchTree T)
{if (T == NULL)return NULL;else if (T->Left == NULL)return T;elsereturn FindMin(T->Left);
}/* 非递归实现 */
Position FindMax(SearchTree T)
{if (T != NULL)while (T->Right != NULL)T = T->Right;return T;
}/* 将元素插入树 */
SearchTree Insert(int x, SearchTree T)
{if (T == NULL){T = malloc(sizeof(struct TreeNode));if (T == NULL)printf("Out of space!\n");else{T->Element = x;T->Left = T->Right = NULL;}}else if (x < T->Element)T->Left = Insert(x, T->Left);else if (x > T->Element)T->Right = Insert(x, T->Right);return T;
}/* 在树中查找x,并删除 */
SearchTree Delete(int x, SearchTree T)
{Position TmpCell;if (T == NULL)printf("Element not found!\n");else if (x < T->Element)T->Left = Delete(x, T->Left);else if (x < T->Element)T->Right = Delete(x, T->Right);else if (T->Left && T->Right){TmpCell = FindMin(T->Right);T->Element = TmpCell->Element;T->Right = Delete(T->Element, T->Right);}else{TmpCell = T;if (T->Left == NULL)T = T->Right;else if (T->Right == NULL)T = T->Left;free(TmpCell);}return T;
}int main()
{SearchTree tree = NULL;MakeEmpty(tree);/* 注意Insert返回值为树 */tree = Insert(3, tree);tree = Insert(1, tree);tree = Insert(2, tree);tree = Insert(4, tree);Position p;p = FindMin(tree);printf("Min = %d\n", p->Element);p = FindMax(tree);printf("Max = %d\n", p->Element);p = Find(1, tree);if (p != NULL){printf("Find %d success!\n", p->Element);}else{printf("Do not find in tree!\n");}tree = Delete(1, tree);p = FindMin(tree);printf("Min = %d\n", p->Element);return 0;
}

转载于:https://www.cnblogs.com/james1207/p/3268575.html

树和而叉查找树的实现相关推荐

  1. [转]B树(多向平衡查找树)详解

    B-树是对2-3树数据结构的扩展.它支持对保存在磁盘或者网络上的符号表进行外部查找,这些文件可能比我们以前考虑的输入要大的多(以前的输入能够保存在内存中). (B树和B+树是实现数据库的数据结构,一般 ...

  2. 关于树,各种平衡树查找树的资料合集~~

    我们知道,对于一般的二叉搜索树(Binary Search Tree),其期望高度(即为一棵平衡树时)为log2n,其各操作的时间复杂度(O(log2n))同时也由此而决定.但是,在某些极端的情况下( ...

  3. 数据结构—2-3树、2-3-4树、B树、B+树等多路查找树的原理详解

    详细介绍了多路查找树中的2-3树.2-3-4树.B树.B+树的概念的区别,以及它们的应用场景. 文章目录 1 多路查找树的概述 1.1 索引概述 1.2 多路查找树的引出 2 2-3树 2.1 2-3 ...

  4. codevs 1729 单词查找树

    二次联通门 : codevs 1729 单词查找树 /*codevs 1729 单词查找树Trie树统计节点个数建一棵Trie树插入单词时每新开一个节点就计数器加1*/ #include <cs ...

  5. 快乐学算法之:三分查找树ternary search tree

    文章目录 简介 三分查找树的结构 三分查找树的代码表示 三分查找树的应用 简介 之前我们介绍了tire字典树,tire字典树的优点就是插入和查找比较快速,但是它的缺点就是占用的空间比较大.假如我们要存 ...

  6. B树-多路平衡查找树

    B树 B树 一个m阶B树的具有的特征(或必须满足的条件) B树的查找 B树插入元素(一定是在叶子节点插入) 1.插入后,没有破坏B树的规则 2.插入后,叶子节点元素超过m-1个 B树删除元素 1.删除 ...

  7. 各种树:trie树、B树、B-树、B+树、B*树

    红黑树rbtree 二叉排序树 map 就是采用红黑树存储的,红黑树(RB Tree)是平衡二叉树,其优点就是树到叶子节点深度一致,查找的效率也就一样,为logN.在实行查找,插入,删除的效率都一致, ...

  8. 【转】各种树:trie树、B树、B-树、B+树、B*树

    红黑树rbtree 二叉排序树 map 就是采用红黑树存储的,红黑树(RB Tree)是平衡二叉树,其优点就是树到叶子节点深度一致,查找的效率也就一样,为logN.在实行查找,插入,删除的效率都一致, ...

  9. 【转】从Trie树(字典树)谈到后缀树

    本文第一部分,咱们就来了解这个Trie树,然后自然而然过渡到第二部分.后缀树,接着进入第三部分.详细阐述后缀树的构造方法-Ukkonen. 第一部分.Trie树 1.1.什么是Trie树 Trie树, ...

最新文章

  1. ViSP中识别AprilTag的C++实例代码与运行结果
  2. 大家都在看的公众号是哪几个?
  3. 真正的男人要勇于承担责任......
  4. 单独像对相对定向的部分基本概念
  5. 程序员放弃阿里60w年薪,选到手5k的公务员,坚信公务员后期完胜程序员
  6. DevexPress checkedit 多选解决方案(原创)
  7. 程序员的大恩人永远地离开了
  8. Java语言程序设计基础篇第10版第5章习题答案
  9. 《手把手教你学DSP-基于TMS320F28335》书中的错误
  10. Java入门学习笔记——郝斌(三)线程
  11. 小心!第三方支付最常遇到的 6 大骗局!
  12. 输入PM2.5的值,输出当日的空气质量
  13. ubantu下部署python
  14. 报错 AttributeError: ‘scipy.spatial.transform._rotation.Rotation‘ object has no attribute ‘as_dcm‘
  15. 企业遇到什么问题一定要用360评估?
  16. 基于JAVA医院预约挂号系统设计与实现 开题报告
  17. 计算机网络 理论复习概括
  18. RMS TO EAP通过MQTT简单实现(2)
  19. 关于redis多个哨兵sentinel在阿里云的坑 sdown sentinel或者failover-abort-not-elected
  20. 关于OV5640的DVP接口的小结

热门文章

  1. JAVASCRIPT C# 相互访问
  2. go语言中使用递归函数实现文件目录的遍历
  3. 在Windows环境下安装hyperledger和byfn
  4. 给定两个字符串形式的非负整数 num1 和num2 ,计算它们的和。
  5. 指针:自定义函数length,调用它计算字符串的长度
  6. Mysql - Binlog
  7. 日常生活小技巧 -- “Error: Encountered an improper argument”的解决方法
  8. Java中“==”和equals()的区别
  9. IPFS网络是如何运行的(p2p网络)
  10. android6.0源码分析之Camera API2.0下的Capture流程分析