二叉搜索树实现文件C++
2011-06-02 14:19
239 查看
// 13-1.cpp #include "stdafx.h" #include "13-1.h" namespace binarySearchTree { // private: Node * BinarySearchTree :: m_MakeNode (const Item & item) { Node * newNode = new Node ; if (newNode) { newNode -> item = item ; newNode -> left = newNode -> right = NULL ; } return newNode ; } void BinarySearchTree :: m_PrecedingOrderTreversal (const Node * const pn) const { if (pn) { std :: cout << pn -> item << std :: endl ; m_PrecedingOrderTreversal (pn -> left) ; m_PrecedingOrderTreversal (pn -> right) ; } } void BinarySearchTree :: m_IntermediateOrderTraversal (const Node * const pn) const { if (pn) { m_IntermediateOrderTraversal (pn -> left) ; std :: cout << pn -> item << std :: endl ; m_IntermediateOrderTraversal (pn -> right) ; } } void BinarySearchTree :: m_HindOrderTraversal (const Node * const pn) const { if (pn) { m_HindOrderTraversal (pn -> left) ; m_HindOrderTraversal (pn -> right) ; std :: cout << pn -> item << std :: endl ; } } void BinarySearchTree :: m_Release (const Node * const pn) { if (pn) { m_Release (pn -> left) ; m_Release (pn -> right) ; delete pn ; } } void BinarySearchTree :: m_Copy (const Node * const pn) { if (pn) { Insert (pn -> item) ; m_Copy (pn -> left) ; m_Copy (pn -> right) ; } } Item BinarySearchTree :: m_FindMin (const Node * pRight) const { while (pRight -> left) pRight = pRight -> left ; return pRight -> item ; } // public: BinarySearchTree :: BinarySearchTree (void) { m_root = NULL ; m_current = 0 ; } BinarySearchTree :: BinarySearchTree (const BinarySearchTree & t) { m_root = NULL ; m_current = 0 ; m_Copy (t.m_root) ; } Item BinarySearchTree :: FindMin (void) const { Node * scan = m_root ; while (scan -> left) scan = scan -> left ; return scan -> item ; } Item BinarySearchTree :: FindMax (void) const { Node * scan = m_root ; while (scan -> right) scan = scan -> right ; return scan -> item ; } int BinarySearchTree :: Count (void) const { return m_current ; } bool BinarySearchTree :: IsEmpty (void) const { return 0 == m_current ; } bool BinarySearchTree :: Find (const Item & item) const { Node * scan = m_root ; while (scan && scan -> item != item) { if (item < scan -> item) scan = scan -> left ; else scan = scan -> right ; } if (!scan) return false ; else return true ; } bool BinarySearchTree :: Insert (const Item & item) { Node * newNode = m_MakeNode (item) ; if (!newNode) return false ; if (IsEmpty ()) { m_root = newNode ; m_current = 1 ; return true ; } Node * scan = m_root ; while (1) { if (item < scan -> item) { if (!scan -> left) { scan -> left = newNode ; break ; } else scan = scan -> left ; } else { if (!scan -> right) { scan -> right = newNode ; break ; } else scan = scan -> right ; } } ++m_current ; return true ; } bool BinarySearchTree :: Delete (const Item & item) { Node * scan = m_root, * parent = NULL ; while (scan && scan -> item != item) { parent = scan ; if (item < scan -> item) scan = scan -> left ; else scan = scan -> right ; } // Not in tree if (!scan) return false ; // If has two chidren if (scan -> left && scan -> right) { Item temp = m_FindMin (scan -> right) ; Delete (temp) ; scan -> item = temp ; } // Else if has left child only else if (scan -> left) { if (parent) { if (scan == parent -> left) { parent -> left = scan -> left ; delete scan ; } else { parent -> right = scan -> left ; delete scan ; } } else { m_root = scan -> left ; delete scan ; } } // Else if has right child only // or is a leaf else { if (parent) { if (scan == parent -> left) { parent -> left = scan -> right ; delete scan ; } else { parent -> right = scan -> right ; delete scan ; } } else { m_root = scan -> right ; delete scan ; } } --m_current ; return true ; } void BinarySearchTree :: PrecedingOrderTreversal (void) const { m_PrecedingOrderTreversal (m_root) ; } void BinarySearchTree :: IntermediateOrderTraversal (void) const { m_IntermediateOrderTraversal (m_root) ; } void BinarySearchTree :: HindOrderTraversal (void) const { m_HindOrderTraversal (m_root) ; } BinarySearchTree & BinarySearchTree :: operator= (const BinarySearchTree & t) { if (this == &t) return *this ; m_Release (m_root) ; m_root = NULL ; m_current = 0 ; m_Copy (t.m_root) ; return *this ; } BinarySearchTree :: ~BinarySearchTree (void) { m_Release (m_root) ; } }
相关文章推荐
- 二叉搜索树就地转双向链表二叉搜索树实现文件C++
- 近亲树实现文件C++
- 文本文件合并(C++实现)
- C++读取、旋转和保存bmp图像文件编程实现
- C++实现多文件中查找多个字符串
- 【C++】实现的二叉搜索树BST
- 使用C++实现功能下载文件
- 统计文件中单词个数--c++实现
- C++实现对简单的文件读写
- C++实现生产guid唯一号应用于日常程序文件
- c++ 模板头文件与实现文件分离
- windows 与linux 下用C++读取sqlite实现文件复制(一)
- c/c++头文件与cpp文件的切换实现
- C++中实现文件修改时间间隔查询 MFC
- C++实现文件数据提取
- 文件加密之异或加密(C++实现)
- 二叉搜索树挂链表实现文件C语言
- C/C++实现文件的备份
- 用C++实现简单的文件I/O操作(ifstream,ofstream)
- C++ 类静态数据成员除了要声明外,还要在类实现文件中进行定义。