BinarySearchTree(1)二叉查找树链式递归实现
来源:互联网 发布:淘宝客推广 编辑:程序博客网 时间:2024/05/22 00:16
binary_search_tree.h
/*----------------------------------------------- Created By EverSteins Email:EverSteins@gmail.com 转载请注明出处 ------------------------------------------------*/#ifndef BINARY_SEARCH_TREE_H#define BINARY_SEARCH_TREE_Htypedef int ElemType;class BinarySearchTree{public:BinarySearchTree():root_(NULL){}~BinarySearchTree();bool Insert(const ElemType& entry);bool Remove(const ElemType& entry);bool Search(const ElemType& entry) const;void InOrderTraverse() const;bool IsEmpty() const;private:struct TreeNode{TreeNode(const ElemType& entry,TreeNode *left,TreeNode *right):entry_(entry),left_(left),right_(right){}ElemType entry_;TreeNode *left_;TreeNode *right_;};void RemoveAllNodes(TreeNode *node);bool Search(const ElemType& target,TreeNode **&node_ptr) const;void InOrderTraverseRecursive(TreeNode *node) const;TreeNode *root_;#define DISALLOW_COPY_AND_ASSIGN(TypeName) \ TypeName(const TypeName&); \ void operator=(const TypeName&)DISALLOW_COPY_AND_ASSIGN(BinarySearchTree);#undef DISALLOW_COPY_AND_ASSIGN};#endif
binary_search_tree.cc
/*----------------------------------------------- Created By EverSteins Email:EverSteins@gmail.com 转载请注明出处 ------------------------------------------------*/ #include "stdafx.h"#include <iostream>#include "utility.h"#include "binary_search_tree.h"using namespace std;BinarySearchTree::~BinarySearchTree(){RemoveAllNodes(root_);}void BinarySearchTree::RemoveAllNodes(TreeNode *node){//采用递归后续遍历删除所有结点if (node == NULL)return;RemoveAllNodes(node->left_);RemoveAllNodes(node->right_);delete node;}bool BinarySearchTree::Insert(const ElemType& entry){return Insert(entry,&root_);}bool BinarySearchTree::Insert(const ElemType& entry,TreeNode **node_ptr){//pre:node_ptr=&root_TreeNode *node = *node_ptr;if (node == NULL){*node_ptr = new TreeNode(entry,NULL,NULL);return true;}if (entry < node->entry_)return Insert(entry,&node->left_);else if (node->entry_ < entry)return Insert(entry,&node->right_);else //相同元素时return false;}bool BinarySearchTree::Remove(const ElemType& entry){return Remove(entry,&root_);}bool BinarySearchTree::Remove(const ElemType& entry,TreeNode **node_ptr){//pre:node_ptr=&root_TreeNode *node = *node_ptr;if (node == NULL)return false;if (entry == node->entry_){Delete(node_ptr);return true;}else if (entry < node->entry_)return Remove(entry,&node->left_);elsereturn Remove(entry,&node->right_);}bool BinarySearchTree::Delete(TreeNode **node_ptr){//todo}bool BinarySearchTree::Search(const ElemType& entry) const{return Search(entry,root_);}bool BinarySearchTree::Search(const ElemType& entry,TreeNode *node){if (node == NULL)return false;if (entry == node->entry_)return true;else if (entry < node->entry_)return (entry,node->left_);else if (entry > node->entry_)return (entry,node->right_);}void BinarySearchTree::InOrderTraverse() const{InOrderTraverseRecursive(root_);}void BinarySearchTree::InOrderTraverseRecursive(TreeNode *node) const{if (node == NULL)return;InOrderTraverseRecursive(node->left_);cout<<node->entry_<<',';InOrderTraverseRecursive(node->right_);}bool BinarySearchTree::IsEmpty() const{return (root_ == NULL)? true : false;}
utility.h
#ifndef UTILITY_H#define UTILITY_H#include <cstddef>#include <cassert>#include <cstdlib>#include <stdlib.h>#endif
- BinarySearchTree(1)二叉查找树链式递归实现
- BinarySearchTree(2)二叉查找树链式非递归实现
- 二叉查找树 BinarySearchTree 实现
- 二叉查找树 BinarySearchTree 的实现
- BinarySearchTree查找二叉树独立实现
- 自己实现一个二叉查找树BinarySearchTree
- BinarySearchTree 二叉查找树
- 比较全的二叉查找树(BinarySearchTree)的实现
- 二叉树-链式-递归实现
- 编程练习——二叉查找树(BinarySearchTree)
- 二叉搜索树BinarySearchTree的实现
- 二叉树的链式实现(插入,查找,遍历,删除)
- 链式结构实现二叉查找树(二叉排序树)
- 递归实现二叉查找树
- 数据结构与算法分析 c++11 查找二叉树 BinarySearchTree
- 数据结构之二叉搜索树(BinarySearchTree)
- 二叉搜索树 BinarySearchTree
- 链式二叉树-递归操作
- 用C语言进行BMP文件的读写
- 在vs里设置起始页、取消设置的起始页
- 两个数大小的比较
- Linux Cat命令三大主要功能详解
- 我的emacs配置文件
- BinarySearchTree(1)二叉查找树链式递归实现
- hdu 2795 Billboard
- java基础重要知识点总结
- MongoDB学习笔记(一) MongoDB介绍及安装
- 1000~2000内能被17和37整除的数
- 80x86汇编指令详解(上)(转帖)
- JAVA的Random类
- [初始化函数]SystemInit()
- 浅析HTML5在移动应用开发中的使用