#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;
}
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;
}