typedef struct tagSTreeNode
{
int value;
tagSTreeNode* pLeft;
tagSTreeNode* pRight;
tagSTreeNode(int v) : value(v), pLeft(NULL), pRight(NULL){}
}STreeNode;
typedef void (*VISIT)(int value); // 定义一个
class CBinaryTree
{
private:
STreeNode* m_pRoot;
private:
void Destory(STreeNode* pRoot);
bool _Insert(STreeNode*& pRoot, int value); // 递归
bool _Insert2(int value); // 非递归
void _PreOrder(STreeNode* pRoot, VISIT Visit) const; // 递归
void _PreOrder2(VISIT Visit) const; // 非递归
void _InOrder(STreeNode* pRoot, VISIT Visit) const; // 递归
void _InOrder2(VISIT Visit) const; // 非递归
void _InOrder3(VISIT Visit) const; // 非递归
void _PostOrder(STreeNode* pParent, VISIT Visit) const; // 递归
void _PostOrder2(VISIT Visit) const; // 非递归
void DeleteChildless(STreeNode* pParent, STreeNode* pNode); // pNode无子
void DeleteSingleSon(STreeNode* pParent, STreeNode* pNode); // pNode是pParent唯一子节点
public:
CBinaryTree();
~CBinaryTree();
bool Insert(int value);
bool Delete(int value);
STreeNode* Find(int value) const;
void PreOrder(VISIT Visit) const;
void InOrder(VISIT Visit) const;
void PostOrder(VISIT Visit) const;
};
后面博客里面会分别介绍每一个方法