C++创建二叉树及操作.docx
- 文档编号:598760
- 上传时间:2022-10-11
- 格式:DOCX
- 页数:8
- 大小:15.31KB
C++创建二叉树及操作.docx
《C++创建二叉树及操作.docx》由会员分享,可在线阅读,更多相关《C++创建二叉树及操作.docx(8页珍藏版)》请在冰豆网上搜索。
C++创建二叉树及操作
#include
#include
#include
#defineOK1
#defineERROR0
#defineOVERFLOW-2
typedefcharElemType;
constintMaxLength=30;//结点个数不超过30个
typedefstructBiTreeNode{
ElemTypedata;
structBiTreeNode*lchild,*rchild;
}BiTreeNode,*BiTree;
voidCreateBiTree(BiTree&T)
{
ElemTypech;
cin>>ch;
if(ch=='#')
T=NULL;
else
{
if(!
(T=newBiTreeNode))
exit(OVERFLOW);
T->data=ch;//生成根结点
CreateBiTree(T->lchild);//构造左子树
CreateBiTree(T->rchild);//构造右子树
}
}//CreateBiTree
voidPreOrder(BiTree&T)//递归函数:
先序遍历以T为根的二叉树。
{
if(T!
=NULL)//递归结束条件
{
cout<
PreOrder(T->lchild);//先序遍历根的左子树
PreOrder(T->rchild);//先序遍历根的右子树
}
}
voidInOrder(BiTree&T)//递归函数:
中序次序遍历以T为根的子树。
{
if(T!
=NULL)//NULL是递归终止条件
{
InOrder(T->lchild);//中序遍历根的左子树
cout<
InOrder(T->rchild);//中序遍历根的右子树
}
}
voidPostOrder(BiTree&T)//递归函数:
后序次序遍历以T为根的子树。
{
if(T!
=NULL)//NULL是递归终止条件
{
PostOrder(T->lchild);//后序遍历根的左子树
PostOrder(T->rchild);//后序遍历根的右子树
cout<
}
}
voidLevelOrder(BiTreeT)//层序遍历
{
BiTreeQ[MaxLength];
intfront=0,rear=0;
BiTreep;
if(T)//根结点入队
{
Q[rear]=T;
rear=(rear+1)%MaxLength;
}
while(front!
=rear)
{
p=Q[front];//队头元素出队
front=(front+1)%MaxLength;
cout<
if(p->lchild)//左孩子不为空,入队
{
Q[rear]=p->lchild;
rear=(rear+1)%MaxLength;
}
if(p->rchild)//右孩子不为空,入队
{
Q[rear]=p->rchild;
rear=(rear+1)%MaxLength;
}
}
}
boolComplete(BiTreeT)
{
BiTreeQ[MaxLength];
intfront=0,rear=0;
BiTreep;
if(T==NULL)//根结点入队
{
returntrue;
}
else
{
Q[rear]=T;
rear=(rear+1)%MaxLength;
while(front!
=rear)
{
p=Q[front];//队头元素出队
front=(front+1)%MaxLength;
if(p)
{
Q[rear]=p->lchild;
rear=(rear+1)%MaxLength;
Q[rear]=p->rchild;
rear=(rear+1)%MaxLength;
}
else
{
while(front!
=rear)
{
p=Q[front];
if(p)
{
returnfalse;
}
else
{
returntrue;
}
}
}
}
returntrue;
}
}
intDepth(BiTreeT)
{
intdepthval,depthleft,depthright;
if(!
T)
{
depthval=0;
}
else
{
depthleft=Depth(T->lchild);
depthright=Depth(T->rchild);
depthval=1+(depthleft>depthright?
depthleft:
depthright);
}
returndepthval;
}
intCountleaf(BiTreeT)
{
intm,n;
if(!
T)
{
return0;
}
if(!
T->lchild&&!
T->rchild)
{
return1;
}
else
{
m=Countleaf(T->lchild);
n=Countleaf(T->rchild);
return(m+n);
}
}
intCountleafs(BiTreeT)
{
intm,n;
if(!
T)
{
return0;
}
if(!
T->lchild&&!
T->rchild)
{
return1;
}
else
{
m=Countleafs(T->lchild);
n=Countleafs(T->rchild);
return(m+n+1);
}
}
BiTree.cpp文件
#include"BiTree.h"
voidmain()
{
cout<<"MadebyFly!
!
~~"< cout<<"请输入二叉树序列,如: AB#C##D##"< BiTreetree; CreateBiTree(tree); cout<<"二叉树创建完成! ~~"< cout<<"先序遍历二叉树输出结果: "; PreOrder(tree); cout< cout<<"中序遍历二叉树输出结果: "; InOrder(tree); cout< cout<<"后序遍历二叉树输出结果: "; PostOrder(tree); cout< cout<<"层次遍历二叉树输出结果: "; LevelOrder(tree); cout< cout<<"层次遍历二叉树判定是否为完全二叉树: "< boolt=Complete(tree); if(t) { cout<<"此二叉树是完全二叉树。 "< } else { cout<<"此二叉树不是完全二叉树。 "< } cout<<"此二叉树的深度为: "; intm=Depth(tree); cout< cout<<"此二叉树的总结点个数为: "; intn=Countleafs(tree); cout< cout<<"此二叉树的叶子结点个数为: "; inta=Countleaf(tree); cout< }
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- C+ 创建 二叉 操作