VBinaryTree.h
#ifndef __V_BINARY_TREE__
#define __V_BINARY_TREE__
typedef void(*BinaryTreeMitFun)(int);
struct stBinaryTreeNode;
class VBinaryTree
{
public:
VBinaryTree(void) { VBinaryTreeInit(); }
~VBinaryTree(void) { VBinaryTreeDeInit(); }
void VBinaryTreeInit(void);
void VBinaryTreeDeInit(void);
VBinaryTree& VBinaryTreeSearch(int);
bool VBinaryTreeInsert(int);
void VBinaryTreeMiter(BinaryTreeMitFun);
private:
stBinaryTreeNode* m_pnode;
};
struct stBinaryTreeNode
{
int val;
VBinaryTree left;
VBinaryTree right;
};
#endif
VBinaryTree.c
#include "VBinaryTree.h"
void VBinaryTree::VBinaryTreeInit(void)
{
m_pnode = NULL;
}
void VBinaryTree::VBinaryTreeDeInit(void)
{
if( !m_pnode )
{
return;
}
m_pnode->left.VBinaryTreeDeInit();
m_pnode->right.VBinaryTreeDeInit();
delete (m_pnode);
m_pnode = NULL;
}
VBinaryTree& VBinaryTree::VBinaryTreeSearch(int val)
{
if( !m_pnode )
{
return (VBinaryTree&)(*this);
}
if( m_pnode->val == val )
{
return (VBinaryTree&)(*this);
}
else if( m_pnode->val > val )
{
return m_pnode->left.VBinaryTreeSearch(val);
}
else
{
return m_pnode->right.VBinaryTreeSearch(val);
}
}
bool VBinaryTree::VBinaryTreeInsert(int val)
{
VBinaryTree* p_tree = &(VBinaryTreeSearch(val));
if( p_tree->m_pnode )
{
return 1;
}
else
{
p_tree->m_pnode = new stBinaryTreeNode;
if( !p_tree->m_pnode )
{
return 1;
}
else
{
p_tree->m_pnode->val = val;
p_tree->m_pnode->left.m_pnode = NULL;
p_tree->m_pnode->right.m_pnode = NULL;
return 0;
}
}
}
void VBinaryTree::VBinaryTreeMiter(BinaryTreeMitFun pFun)
{
if( !m_pnode )
{
return;
}
m_pnode->left.VBinaryTreeMiter(pFun);
pFun(m_pnode->val);
m_pnode->right.VBinaryTreeMiter(pFun);
}
main.c
#include "iostream"
#include "VBinaryTree.h"
using namespace std;
void myPrint(int a)
{
cout << a << " ";
}
int main(void)
{
VBinaryTree myTree;
for( int i=0; i<10; i++ )
{
myTree.VBinaryTreeInsert(i);
}
myTree.VBinaryTreeMiter(myPrint);
cout << "" << endl;
myTree.VBinaryTreeDeInit();
myTree.VBinaryTreeInsert(2);
myTree.VBinaryTreeInsert(2321);
myTree.VBinaryTreeInsert(-2);
myTree.VBinaryTreeInsert(30);
myTree.VBinaryTreeMiter(myPrint);
cout << "" << endl;
return 0;
}