C++实现二叉树
由于时间原因删除节点并未实现。只有插入,寻找,前中后序遍历,找最大最小节点的方法。
#include<iostream>
#include<gtest/gtest.h>
using namespace std;
struct TreeNode
{
int data;
TreeNode *left;
TreeNode *right;
TreeNode(const int& data):data(data),left(NULL),right(NULL){}
};
class Tree
{
public:
TreeNode *pHead;
Tree():pHead(NULL){}
Tree(const int& data):pHead(new TreeNode(data)){}
~Tree()
{
Destroy(pHead);
pHead =NULL;
}
void insert(const int& data)
{
Treeinsert(data, pHead);
}
bool find(const int& data)
{
Treefind(data, pHead);
}
void preOrder()
{
TreepreOrder(pHead);
}
void inOrder()
{
TreeinOrder(pHead);
}
void postOrder()
{
TreepostOrder(pHead);
}
bool Delete(const int& data)
{
return Treedelete(data, pHead);
}
void destroy()
{
Destroy(pHead);
pHead =NULL;
}
TreeNode* findMin(TreeNode *TempNode)
{
if(TempNode != NULL)
{
while(NULL != TempNode->left)
{
TempNode = TempNode->left;
}
return TempNode;
}
return NULL;
}
TreeNode* findMax(TreeNode *TempNode)
{
if(TempNode != NULL)
{
while(NULL != TempNode->right)
{
TempNode = TempNode->right;
}
return TempNode;
}
return NULL;
}
private:
void Treeinsert(const int& data, TreeNode* &TempNode)
{
if(NULL == TempNode)
{
TempNode = new TreeNode(data);
}
else if(data < TempNode->data)
{
Treeinsert(data, TempNode->left);
}
else if(data > TempNode->data)
{
Treeinsert(data, TempNode->right);
}
else
{
cout<<"can't insert same data !"<<endl;
}
}
bool Treefind(const int& data, TreeNode *TempNode)
{
if(TempNode ==NULL)
{
return false;
}
else if(data < TempNode->data)
{
return Treefind(data, TempNode->left);
}
else if(data > TempNode->data)
{
return Treefind(data, TempNode->right);
}
else
{
return true;
}
}
void TreepreOrder(TreeNode *TempNode)
{
if(TempNode != NULL)
{
cout<<TempNode->data<<" ";
TreepreOrder(TempNode->left);
TreepreOrder(TempNode->right);
}
}
void TreeinOrder(TreeNode *TempNode)
{
if(TempNode != NULL)
{
TreeinOrder(TempNode->left);
cout<<TempNode->data<<" ";
TreeinOrder(TempNode->right);
}
}
void TreepostOrder(TreeNode *TempNode)
{
if(TempNode != NULL)
{
TreepostOrder(TempNode->left);
TreepostOrder(TempNode->right);
cout<<TempNode->data<<" ";
}
}
bool Treedelete(const int& data, TreeNode *&TempNode)
{
}
void Destroy(TreeNode *&TempNode)
{
if(TempNode != NULL)
{
TreeNode *Temp_Node2 = TempNode;
if(TempNode->left == NULL)
{
if(TempNode->right == NULL)
{
delete Temp_Node2;
}
else
{
Destroy(TempNode->right);
}
}
else
{
Destroy(TempNode->left);
}
}
}
};
int main(int argc,char *argv[])
{
Tree mytree;
mytree.insert(4);
mytree.insert(2);
mytree.insert(3);
mytree.insert(5);
mytree.insert(1);
mytree.preOrder();
cout<<endl;
mytree.inOrder();
cout<<endl;
mytree.postOrder();
cout<<endl<<mytree.find(1)<<mytree.find(2)<<mytree.find(6)<<mytree.find(7)<<endl;
mytree.inOrder();
cout<<endl;
mytree.postOrder();
TreeNode *temptree = mytree.findMin(mytree.pHead);
cout<<temptree->data<<endl;
return 0;
}