标签:
二叉树的结构什么的基本都知道,二叉搜索树就是比就简单的二叉树多了一个特性(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
在最初设计时我想把所有未对树本身做改变的操作的参数都设为const型常量,但目前来说实现方面我还没有完全解决,这就是为什么在函数声明中有几个参数为const常量的注释。
最后一个Traversal()函数是对二叉搜索树的遍历,我对于按层遍历的编写仍然没有成功(并且我只想按层遍历,prefix, infix 和 postfix的遍历思想差不多),所以目前还没写出来,在参考过别的网站和书籍后再补充上去。
标签:
原文地址:http://www.cnblogs.com/bolgofzjr/p/4827722.html