MyAVLTree.h
#pragma once
#include <memory.h>
// IsEmpty():若树为空,返回true,否则返回false
// GetDepth():获得树的深度
// Destroy():销毁一颗树
// Clear():清空一棵树
// GetRoot(T):返回树的根节点到T中
// GetValue(T):返回指定节点T的值
// PreOrderTraverse():前序遍历整棵树
// InOrderTraverse():中序遍历整棵树
// PostOrderTraverse():后序遍历整棵树
// Insert(e): 在树中插入新节点,并将值设为e
// Delete(e):将值为e的节点在树中删除
class MyBiTree
{
public:
typedef struct _NODE
{
_NODE* pLeft;
_NODE* pRight;
int nData;
}NODE,*PNODE;
MyBiTree(void);
~MyBiTree(void);
public:
bool IsEmpty(); // 判断树是否为空
int GetDepth(PNODE pNode)
{
if (pNode==nullptr)
{
return 0;
}
int nLeftDepth = GetDepth(pNode->pLeft);
int nRightDepth = GetDepth(pNode->pRight);
if (nLeftDepth>nRightDepth)
{
return nLeftDepth+1;
}
else
{
return nRightDepth+1;
}
// return nLeftDepth>nRightDepth?
// nLeftDepth:nRightDepth;
}
void PreOrderTraverse()//前序遍历
{
PreOrderTraverse(m_pRoot);
printf("\n");
}
void MidOrderTraverse()//中序遍历
{
MidOrderTraverse(m_pRoot);
printf("\n");
}
void SubOrderTraverse()//后序遍历
{
SubOrderTraverse(m_pRoot);
printf("\n");
}
bool InsertEle(int nEle)
{
return Insert(nEle,m_pRoot);
}
bool DeleteEle(int nEle)
{
Delete(nEle,m_pRoot);
}
private:
void PreOrderTraverse(PNODE pNode);
void MidOrderTraverse(PNODE pNode);
void SubOrderTraverse(PNODE pNode);