码迷,mamicode.com
首页 > 其他好文 > 详细

Binary Search Tree (二叉搜索树)

时间:2015-09-22 01:18:17      阅读:231      评论:0      收藏:0      [点我收藏+]

标签:

一直在看Data Structure and Algorithm Analysis 的原版,英文水平有限看的比较慢。代码功力就更不用说了,所以代码打的还没有看书快……已经在看优先队列了,AVL树还没有打完也是棒棒哒。这会儿就先从二叉树更新开始吧。

 

二叉树的结构什么的基本都知道,二叉搜索树就是比就简单的二叉树多了一个特性(property)——每个节点的左子叶内的key比节点的key小,而其右子叶的key比节点的key大。这个特性不是唯一的(比如左右子叶相对于其父节点的key值大小顺序可以颠倒),在学习时学会一种方法另一种也就没什么问题。从这一特性还可以知道,二叉树中最小的值一定在左子树中而最大的值一定在右子树中。在构建构造二叉搜索树时必须要设计节点元素大小的比较,为了学习的方便,这里使用int类型作为二叉搜索树节点中key值的类型。

我实现的代码github为:https://github.com/smallbal/DataStructure_in_C/tree/master/binary_search_tree

我这里将二叉树节点的声明和其操作(operation)声明放在一个头文件中(binary_search_tree.h): 

技术分享
 1 #ifndef _BINARY_SEARCH_TREE_H_
 2 #define _BINARY_SEARCH_TREE_H_ 
 3 
 4 typedef enum FUNCTIONSTATE{
 5   FUNC_TRUE,
 6   FUNC_FAILURE,
 7   FUNC_BIGER,
 8   FUNC_SMALLER,
 9   FUNC_EQUAL
10 }FUNCTIONSTATE;
11 
12 typedef int ElementType;
13 struct _node;
14 typedef struct _node *BinarySearchTree;
15 typedef BinarySearchTree Position;
16 
17 
18 typedef struct _node
19 {
20   ElementType element;
21   Position leftnode;
22   Position rightnode;
23 }Node;
24   
25 BinarySearchTree MakeBinarySearchTree(const ElementType X);
26 FUNCTIONSTATE MakeBinarySearchTreeEmpty(BinarySearchTree T);
27 FUNCTIONSTATE IsEmpty(const BinarySearchTree T);
28 void InsertNode(ElementType X, BinarySearchTree *T);
29 //Position FindNode(const ElementType X, const BinarySearchTree T);
30 Position FindNode(const ElementType X, BinarySearchTree T);
31 FUNCTIONSTATE DeleteNode(ElementType X, BinarySearchTree T);
32 //ElementType FindMaxElement(const BinarySearchTree T);
33 //ElementType FindMinElement(const BinarySearchTree T);
34 ElementType FindMaxElement(BinarySearchTree T);
35 ElementType FindMinElement(BinarySearchTree T);
36 FUNCTIONSTATE Traversal(const BinarySearchTree T);//There are lots of problems
37 #endif
binary_search_tree.h

 

在最初设计时我想把所有未对树本身做改变的操作的参数都设为const型常量,但目前来说实现方面我还没有完全解决,这就是为什么在函数声明中有几个参数为const常量的注释。
最后一个Traversal()函数是对二叉搜索树的遍历,我对于按层遍历的编写仍然没有成功(并且我只想按层遍历,prefix, infix 和 postfix的遍历思想差不多),所以目前还没写出来,在参考过别的网站和书籍后再补充上去。

Binary Search Tree (二叉搜索树)

标签:

原文地址:http://www.cnblogs.com/bolgofzjr/p/4827722.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!