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;
//定义一个查找后继的函数


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;
}
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());


system("pause");
return 0;
}
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值