VBinaryTree.h
cpp
#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
cpp
#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;
}
// 在有序二叉树(左<中<右)中搜寻节点,通过对照val来查找
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
cpp
#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;
}