算法导论第十二章关于搜索二叉树的建立,查询,查找最大最小元素值,查找给定结点的直接后继
来源:互联网 发布:淄博网站搜索优化 编辑:程序博客网 时间:2024/05/01 14:03
最近在苦练C++,看到了算法导论中十二章关于搜索二叉树的讲解
搜索二叉树可用于排序,查找给定元素组的最小最大值元素;
欢迎各位同学交流;
完整程序参考如下::
#include<iostream>
using namespace std;
template<class Type>
class BTree;
template<class Type>
class BNode{
friend class BTree<Type>;
public:
BNode():left(NULL),right(NULL),patrent(NULL){}
BNode(const Type &value):data(value),left(NULL),right(NULL),parent(NULL){}
private:
Type data;
BNode *left;
BNode *right;
BNode *parent;
};
template<class Type>
class BTree{
public:
BTree():root(NULL){}
//获得根结点的指针
BNode<Type> *get_root()const
{
return root;
}
//像二叉树里面添加元素
void add_element(const Type &value);
void inorder_traverse( BNode<Type> *startNode) const;
BNode<Type> *Tree_Search(BNode<Type> *startNode,const Type &value) const;
//查询二叉树里面元素的最小值
BNode<Type> *search_min(BNode<Type> *startNode1) const;
//查询二叉树里面的最大值
BNode<Type> *search_max(BNode<Type> *startNode1) const;
//定义一个查找后继的函数
BNode<Type> *tree_successor(BNode<Type> *Node) const;
private:
BNode<Type> *root;
};
template<class Type>
void BTree<Type>::add_element(const Type &value)
{
if(root==NULL)
{
root=new BNode<Type>(value);
}
else
{
BNode<Type> *node=root;
while(1)
{
if(value>node->data)
{
if(node->right==NULL)
{
node->right=new BNode<Type>(value);
node->right->parent=node;
break;
}
else
{
node=node->right;
}
}
else
{
if(node->left==NULL)
{
node->left=new BNode<Type>(value);
node->left->parent=node;
break;
}
else
{
node=node->left;
}
}
}
}
}
//对二叉树进行中序遍历
template<class Type>
void BTree<Type>::inorder_traverse( BNode<Type> *startNode) const
{
if(startNode==NULL)
{
return;
}
else
{
inorder_traverse(startNode->left);
cout<<startNode->data<<" ";
inorder_traverse(startNode->right);
}
}
//对二叉树进行查找
template<class Type>
BNode<Type> *BTree<Type>::Tree_Search( BNode<Type> *Node,const Type &value) const
{
while(Node!=NULL&&Node->data!=value)
{
if(value>Node->data)
Node=Node->right;
else
{
Node=Node->left;
}
}
cout<<"找到给定的元素值为"<<Node->data<<endl;
return Node;
}
template<class Type>
BNode<Type> *BTree<Type>::search_min(BNode<Type> *startNode1) const
{
while((startNode1->left)!=NULL)
{
startNode1=startNode1->left;
}
cout<<"二叉树中的最小元素的值为"<<startNode1->data<<endl;
return startNode1;
}
template<class Type>
BNode<Type> *BTree<Type>::search_max(BNode<Type> *startNode1) const
{
while((startNode1->right)!=NULL)
{
startNode1=startNode1->right;
}
cout<<"二叉树中的最大元素的值为"<<startNode1->data<<endl;
return startNode1;
}
template<class Type>
BNode<Type> *BTree<Type>::tree_successor(BNode<Type> *Node) const
{
if(Node=search_max(get_root()))
{cout<<"没有后继元素值"<<endl;
return NULL;
}
if(Node->right!=NULL)
{
cout<<Node->data<<"的后继值是"<<search_min(Node->right)->data<<endl;
return search_min(Node->right);
}
else
{
BNode<Type> *p=Node->parent;
while(p!=NULL&&p->right==Node)
{
Node=p;
p=p->parent;
}
cout<<Node->data<<"的后继值是"<<p->data<<endl;
return p;
}
}
int main()
{ BTree<int> tree;
tree.add_element(6);
tree.add_element(5);
tree.add_element(4);
tree.add_element(2);
tree.add_element(7);
tree.add_element(8);
tree.inorder_traverse(tree.get_root());
tree.Tree_Search(tree.get_root(),5);
tree.search_min(tree.get_root());
tree.search_max(tree.get_root());
tree.tree_successor(tree.search_max(tree.get_root()));
system("pause");
return 0;
}
- 算法导论第十二章关于搜索二叉树的建立,查询,查找最大最小元素值,查找给定结点的直接后继
- 二叉查找树的创建,插入,搜索,查询后继
- C++关于搜索二叉树的建立,查询,删除,求最大,最小元素
- 算法导论第12章 二叉查找树中的后继
- 算法导论第十二章:二叉查找树
- 二叉查找树(4) - 中序查找一个给定值的前驱以及后继
- 二叉查找树的后继
- data_struction_test3:二叉查找树,查找值最小的结点
- 二叉树的祖先结点,删除,插入,查找,前驱结点,后继结点等
- 什么是二叉搜索树、二叉搜索树的查找(递归或循环)和二叉搜索树的查找最大最小元素
- 算法导论第十二章——二叉查找树的C++代码实现
- 018给定二叉查找树的一个结点, 写一个算法查找它的“下一个”结点“(keep it up)
- 《算法导论》学习笔记--第十二章 二叉查找树
- 算法导论第十二(12)章 二叉查找树
- 算法导论 第十二章:二叉查找树(Binary Search Trees)
- 查找二叉查找树的任意给定结点的“下一个”结点
- (Swift 实现)二叉搜索树 —— 创建,最大,最小,查找,插入,删除,前驱,后继,中序遍历
- 找出二叉查找树中指定结点的”下一个"结点(也即中序后继)
- Android 网络协议
- saffah的模拟赛 距离统计
- 初装android 虚拟机 各种问题
- 中缀表达式转后缀表达式
- hdu 5073
- 算法导论第十二章关于搜索二叉树的建立,查询,查找最大最小元素值,查找给定结点的直接后继
- 常见的负载均衡算法
- 工作总结——视图
- 饼本身的大小,远比你手上的要重要
- 四年程序员感想
- 64bit青蛙toad for oracle下载地址
- 一道有趣的算法题。。。
- php提示undefined index的几种解决方法
- App项目设计开发完整流程