二叉树叶子结点个数计算Word文档下载推荐.docx
《二叉树叶子结点个数计算Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《二叉树叶子结点个数计算Word文档下载推荐.docx(7页珍藏版)》请在冰豆网上搜索。
#include<
iostream>
string>
usingnamespacestd;
structBiNode//二叉树的结点结构
{
chardata;
BiNode*lchild,*rchild;
};
classBiTree
public:
BiTree();
//构造函数,初始化一棵二叉树,其前序序列由键盘输入
~BiTree(void);
//析构函数,释放二叉链表中各结点的存储空间
BiNode*Getroot();
//获得指向根结点的指针
voidPreOrder(BiNode*root);
//前序遍历二叉树
voidBiTree:
:
yezi(BiNode*root,int&
n);
private:
BiNode*root;
//指向根结点的头指针
BiNode*Creat();
//有参构造函数调用
voidRelease(BiNode*root);
//析构函数调用
BiTree:
BiTree()
root=Creat();
}
~BiTree(void)
Release(root);
BiNode*BiTree:
Getroot()
returnroot;
voidBiTree:
PreOrder(BiNode*root)
if(root==NULL)return;
else{
cout<
<
root->
data<
"
"
;
PreOrder(root->
lchild);
PreOrder(root->
rchild);
}
n)
if(root)
{
if(root->
lchild==NULL&
&
rchild==NULL)
n++;
yezi(root->
lchild,n);
rchild,n);
Creat()
charch;
cin>
>
ch;
if(ch=='
#'
)root=NULL;
else{
root=newBiNode;
//生成一个结点
root->
data=ch;
lchild=Creat();
//递归建立左子树
rchild=Creat();
//递归建立右子树
Release(BiNode*root)
if(root!
=NULL){
Release(root->
//释放左子树
//释放右子树
deleteroot;
voidmain()
{cout<
请输入二叉树的结点数据:
BiTreebt;
//创建一棵树
BiNode*root=bt.Getroot();
//获取指向根结点的指针
intn=0;
cout<
------前序遍历------"
endl;
bt.PreOrder(root);
bt.yezi(root,n);
叶子节点数:
n;
5.运行与测试
6.调试感想
非递归算法求叶子结点的个数
stack>
usingnamespacestd;
structnode
intdata;
node*lchild;
node*rchild;
node*root=NULL;
voidmid(node*root,intkey=500)
intsum=0;
stack<
node*>
s;
while(NULL!
=root||!
s.empty())
if(NULL!
=root)
{
s.push(root);
root=root->
lchild;
}
else
root=s.top();
//cout<
if(NULL==root->
lchild&
NULL==root->
rchild)
++sum;
s.pop();
rchild;
sum<
intmain()
root=newnode;
data=100;
node*a=newnode;
node*b=newnode;
node*a1=newnode;
node*a2=newnode;
node*b1=newnode;
node*b2=newnode;
a->
data=200;
b->
data=300;
a1->
data=400;
a2->
data=500;
b1->
data=600;
b2->
data=700;
lchild=a;
rchild=b;
lchild=a1;
rchild=a2;
lchild=b1;
rchild=b2;
lchild=NULL;
rchild=NULL;
mid(root);
return0;