typedef struct _btree
{
int _val;
struct _btree* _rchild;
struct _btree* _lchild;
}BTREE;
class Htree
{
public:
BTREE* CreateTree(int tlevel, string tpos);
void PreOrder(BTREE* t);
void InOrder(BTREE* t);
void PostOrder(BTREE* t);
int GetDepth(BTREE* t);
int getTreeNum(BTREE* t)
private:
BTREE* _root;
};
BTREE* Htree::CreateTree(int tlevel, string tpos)
{
if (tlevel == 0)
return NULL;
BTREE* node = new BTREE();
node->_val = tlevel;
node->_lchild = NULL;
node->_rchild = NULL;
if (tlevel == 1)
return node;
node->_lchild = CreateTree(tlevel - 1, "lchild");
node->_rchild = CreateTree(tlevel - 1, "rchild");
return node;
}
void Htree::PreOrder(BTREE* t)
{
if (t != NULL)
{
cout << t->_val << endl;
PreOrder(t->_lchild);
PreOrder(t->_rchild);
}
}
void Htree::InOrder(BTREE* t)
{
if (t != NULL)
{
InOrder(t->_lchild);
cout << t->_val << endl;
InOrder(t->_rchild);
}
}
void Htree::PostOrder(BTREE* t)
{
if (t != NULL)
{
PostOrder(t->_lchild);
PostOrder(t->_rchild);
cout << t->_val << endl;
}
}
int Htree::GetDepth(BTREE* t)
{
if(t == NULL)
return 0;
int left = GetDepth(t->lchild) + 1;
int right = GetDepth(t->rchild) + 1;
return left > right ? left:right;
}
int Htree::getTreeNum(BTREE* t)
{
if (t == NULL)
return 0;
int left = getTreeNum(t->lChild);
int right = getTreeNum(t->rChild);
return left + right + 1;
}
int main()
{
Htree kk;
BTREE* root = kk.CreateTree(3,"root");
kk.PreOrder(root);
getchar();
return 0;
}
C++类实现二叉树的构建和遍历、深度
于 2018-03-03 15:47:57 首次发布
