二叉搜索树C++实现源码
2013-04-23 16:05
162 查看
二叉搜索树的性质是:对树中的每个结点X,它的左子树的值小于X,它的右子树的值大于X。
BinaryTree.h
BinaryTree.cpp
BinaryTree.h
#include "Utility.h" //typedef struct TreeNode *PtrToNode; typedef struct TreeNode *Position; typedef struct TreeNode *SearchTree; struct TreeNode { int data; TreeNode *left; TreeNode *right; }; SearchTree MakeEmpty( SearchTree T ) { if( T != NULL ) { MakeEmpty( T->left ); MakeEmpty( T->right ); free(T); } return NULL; } Position Find( int x, SearchTree T ) { if( T == NULL ) return NULL; if( x < T->data ) return Find( x, T->left ); else if( x > T->data ) return Find( x, T->right ); else return T; } Position FindMin( SearchTree T ) { if( T == NULL ) return NULL; else if( T->left == NULL ) return T; else return FindMin( T->left ); //照着FindMax实现非递归的方法 } Position FindMax( SearchTree T ) { if( T != NULL ) while( T->right != NULL ) T = T->right; return T; } SearchTree Insert( int x, SearchTree T ) { if( T == NULL ) { T = (TreeNode *)malloc(sizeof(TreeNode)); if( T == NULL ) cout << "存储空间不足!" << endl; else { T->data = x; T->left = T->right = NULL; } }else if( x < T->data ){ T->left = Insert( x, T->left ); }else if( x > T->data ){ T->right = Insert( x, T->right ); } return T; } SearchTree Delete( int x, SearchTree T ) { Position tmp; if( T == NULL ){ cout << "未找到元素!" << endl; }else if( x < T->data ){ T->left = Delete( x, T->left ); }else if( x > T->data ){ T->right = Delete( x, T->right ); }else if( T->left && T->right ){ // x == T->data tmp = FindMin( T->right ); T->data = tmp->data; T->right = Delete( T->data, T->right ); }else{ tmp = T; if( T->left == NULL ) T = T->right; else if( T->right == NULL ) T = T->left; free( tmp ); } return T; } void InOrderPrint( SearchTree T ) { if( T != NULL ) { InOrderPrint( T->left ); cout << T->data << " "; InOrderPrint( T->right ); } } void PreOrderPrint( SearchTree T ) { if( T != NULL ) { cout << T->data << " "; PreOrderPrint( T->left ); PreOrderPrint( T->right ); } }
BinaryTree.cpp
#include "BinaryTree.h" void main() { SearchTree T; Position P; int n = 0; int x = 0; T = MakeEmpty( NULL ); cout << "输入二叉树大小:"<< endl; cin >> n; while( n-- ) { cout << "输入插入结点:"; cin >> x; T = Insert( x, T ); } //for( int i=0; i < n; i++ ) cout << "最大元素:" << FindMax( T )->data << endl; cout << "最小元素:" << FindMin( T )->data << endl; cout << "中序遍历:"; InOrderPrint( T ); cout << endl; cout << "前序遍历:"; PreOrderPrint( T ); cout << endl; /* cout << "输入要删除的结点:"<< endl; cin >> x; //Delete( x, T ); T = Delete( x, T ); InOrderPrint( T ); */ system("PAUSE"); }
相关文章推荐
- 二叉搜索树的C++实现
- nginx源码学习3——定时器c++实现
- 较高人工智能的人机博弈程序实现(多个算法结合)含C++源码
- 二叉搜索树BST的C++实现
- C++虚函数实现一般化操作内幕分析(源码VC6.0可以直接调试)
- 设计模式Mediator的C++实现源码
- Contourlet变换的C++源码的实现
- c++实现A星寻路算法源码
- c++实现0-1背包问题完整源码(动态规划实现)
- C++中超长整型类型的构造与实现(附源码)
- 二叉搜索树详解(C++实现)
- 在Android源码中查找Java代码中native函数对应的C++实现
- 二叉搜索树C++实现
- 字符串反转C++实现源码(带测试用例)
- 迭代贪心算法c++源码实现
- 最大堆(最小堆)C++实现源码
- c++实现0-1背包问题完整源码(动态规划实现)
- C++源码分享(五):观察者模式泛型实现
- SVM与C++源码实现
- C++ 实现二叉搜索树(BST)