C++模板实现二叉查找树(一 树的数据结构定义与节点插入)
2017-03-27 22:33
766 查看
树是一种基本的数据结构.二叉查找树以其高效的搜索效率而被在大数据搜索中广泛应用.本系列文章旨在建立二叉查找树,并实现其基本方法.
其中,每一个数的节点用以下数据结构定义,每个节点都包括data域,左指针和右指针.
树的数据结构如下定义,包括根节点,数的节点统计变量.提供判断空,判断满和插入算法(其余算法在后续章节中陆续添加).
算法实现如下:需要注意,模板T的数据类型应该至少是能够进行”<”或者”>”比较的数据类型.或者是实现了重载这两个运算符的数据结构.否则无法确定大小,也就无法决定如何插入.
其中,每一个数的节点用以下数据结构定义,每个节点都包括data域,左指针和右指针.
template <class T> class BinNode { public: BinNode(); BinNode(const T& data, BinNode<T> *l = NULL, BinNode<T> *r = NULL); T data; BinNode* left; BinNode* right; };
树的数据结构如下定义,包括根节点,数的节点统计变量.提供判断空,判断满和插入算法(其余算法在后续章节中陆续添加).
template <class T, unsigned int capacity> class BinSearchTree { public: BinSearchTree(); bool isEmpty(); bool isFull(); bool insert(T data); private: unsigned int treeNodeNum; BinNode<T> *root; };
算法实现如下:需要注意,模板T的数据类型应该至少是能够进行”<”或者”>”比较的数据类型.或者是实现了重载这两个运算符的数据结构.否则无法确定大小,也就无法决定如何插入.
#include "BinSearchTree.h" template <class T> BinNode<T>::BinNode() { left = NULL; right = NULL; } template<class T> BinNode<T>::BinNode(const T& data, BinNode<T> *l = NULL, BinNode<T> *r = NULL) { this->data = data; left = l; right = r; } template<class T, unsigned int capacity> BinSearchTree<T, capacity>::BinSearchTree() { root = NULL; treeNodeNum = 0; } template<class T, unsigned int capacity> bool BinSearchTree<T, capacity>::isEmpty() { bool rs = false; if ((0 == treeNodeNum) && (NULL == root)) { rs = true; } return rs; } template<class T, unsigned int capacity> bool BinSearchTree<T, capacity>::isFull() { bool rs = false; if (capacity == treeNodeNum) { rs = true; } return rs; } template<class T, unsigned int capacity> bool BinSearchTree<T, capacity>::insert(T data) { bool rs = false; if (isFull()) { rs = false; } else if (isEmpty()) { root = new BinNode<T>(); root->data = data; rs = true; } else { BinNode<T>* parent = NULL; BinNode<T>* node = root; bool leftOrRight = false; //false means left, true means right while (NULL != node) { parent = node; if (data < node->data) { leftOrRight = false; node = node->left; } else { leftOrRight = true; node = node->right; } } BinNode<T>* newNode = new BinNode<T>(); newNode->data = data; if (leftOrRight) { parent->right = newNode; } else { parent->left = newNode; } } return rs; }
相关文章推荐
- C++模板实现二叉查找树(一 树的数据结构定义与节点插入)
- C++模板实现二叉查找树(一 树的数据结构定义与节点插入)
- C++模板实现二叉查找树(一 树的数据结构定义与节点插入)
- C++模板实现二叉查找树(二 节点删除)
- C++模板实现二叉查找树(二 节点删除)
- C++模板实现二叉查找树(二 节点删除)
- C++模板实现二叉查找树(二 节点删除)
- 数据结构各种算法实现(C++模板)
- C++模板应用——在类模板实现中引用其内部定义的复合数据类型
- c++模板的定义和实现
- 二叉搜索树建立、插入、删除、前继节点、后继节点之c++实现
- 数据结构(7) 链队列 c++ 模板实现
- C++模板应用——模板定义和实现分离
- 数据结构(1)顺序表 c++ 模板实现
- 摘:数据结构各种算法实现(C++模板)
- C++模板编程:如何使非通用的模板函数实现声明和定义分离
- 算法与数据结构基础11:C++实现——二拆搜索树节点删除
- 二叉查找树的插入、删除、遍历和查找等C++实现
- 【c++模板实现】二叉查找树
- 二叉查找树带父节点指针的创建,销毁,查找,删除,插入,找前驱后继,找最小值最大值(递归和非递归的实现)