二叉链表

#include

using namespace std;

template
struct binode
{
T data;
binode *lchild,*rchild;
};
template
class bitree
{
public:
bitree(){root=creat(root);}
~bitree(){release(root);}
void preorder(){preorder(root);}
void inorder(){inorder(root);}
void postorder(){postorder(root);}
void leverorder();
void preorderleaf(){cout<<preorderleaf(root)<<endl;}
void count(){cout<<count(root)<<endl;}
void depth(){cout<<depth(root)<<endl;}
private:
binode *root; //头指针
binode *creat(binode *bt);
void release(binode *bt);
void preorder(binode *bt);
void inorder(binode *bt);
void postorder(binode *bt);
int preorderleaf(binode *bt);
int count(binode *bt);
int depth(binode *bt);
};
template
void bitree::preorder(binode *bt)
{
if(btNULL)return;
else
{
cout<data;
preorder(bt->lchild);
preorder(bt->rchild);
}
};
template
void bitree::inorder(binode *bt)
{
if(bt
NULL)return;
else
{
inorder(bt->lchild);
cout<data;
inorder(bt->rchild);
}
};
template
void bitree::postorder(binode *bt) //后序遍历
{
if(btNULL)return;
else
{
postorder(bt->lchild);
postorder(bt->rchild);
cout<data;
}
};
template
void bitree::leverorder() //层序遍历
{
binode *front,*rear,*q;
binode *Q[];
front=rear=-1;
if(root
NULL)return;
Q[++rear]=root;
while(front!=rear)
{
q=Q[++front];
cout<data;
if(q->lchild!=NULL)Q[++rear]=q->lchild;
if(q->rchild!=NULL)Q[++rear]=q->rchild;
}
};
template
binode *bitree::creat(binode *bt)
{
T ch;
cin>>ch;
if(ch==’#’)bt=NULL;
else
{
bt=new binode;bt->data=ch;
bt->lchild=creat(bt->lchild);
bt->rchild=creat(bt->rchild);
}
return bt;
};
template
void bitree::release(binode *bt)
{
if(bt!=NULL);
{
release(bt->lchild);
release(bt->rchild);
delete bt;
}
};
int n=0;
template
int bitree::preorderleaf(binode *root) //叶子结点
{
if(root)
{
if(!root->lchild&&!root->rchild)
n++;
preorderleaf(root->lchild);
preorderleaf(root->rchild);
}
return n;
};
template
int bitree::count(binode *root) //结点个数
{
if(rootNULL)return 0;
int lnum=count(root->lchild);
int rnum=count(root->rchild);
int ret=lnum+rnum+1;
return ret;
};
template
int bitree::depth(binode *root)
{
if(root
NULL)return 0;
int ldepth=depth(root->lchild);
int rdepth=depth(root->rchild);
return ldepth>rdepth?ldepth+1:rdepth+1;
};
int main()
{
cout<<“输入树中元素,如果不存在输入‘#’”<<endl;
bitreeA;
binode *root;
cout<<“前序遍历”<<endl;
A.preorder();
cout<<endl;
cout<<“中序遍历”<<endl;
A.inorder();
cout<<endl;
cout<<“后序遍历”<<endl;
A.postorder();
cout<<endl;
cout<<“叶子结点个数”<<endl;
A.preorderleaf();
cout<<“结点个数”<<endl;
A.count();
cout<<“树的深度”<<endl;
A.depth();
return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值