C++创建二叉树及操作Word格式.docx
《C++创建二叉树及操作Word格式.docx》由会员分享,可在线阅读,更多相关《C++创建二叉树及操作Word格式.docx(8页珍藏版)》请在冰豆网上搜索。
ElemTypech;
cin>
>
ch;
if(ch=='
#'
)
T=NULL;
else
{
if(!
(T=newBiTreeNode))
exit(OVERFLOW);
T->
data=ch;
//生成根结点
CreateBiTree(T->
lchild);
//构造左子树
rchild);
//构造右子树
}
}//CreateBiTree
voidPreOrder(BiTree&
T)//递归函数:
先序遍历以T为根的二叉树。
if(T!
=NULL)//递归结束条件
cout<
<
T->
data<
"
"
;
//访问根结点
PreOrder(T->
//先序遍历根的左子树
//先序遍历根的右子树
}
}
voidInOrder(BiTree&
中序次序遍历以T为根的子树。
=NULL)//NULL是递归终止条件
InOrder(T->
//中序遍历根的左子树
cout<
//访问根结点
//中序遍历根的右子树
voidPostOrder(BiTree&
后序次序遍历以T为根的子树。
PostOrder(T->
//后序遍历根的左子树
//后序遍历根的右子树
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;
p->
if(p->
lchild)//左孩子不为空,入队
{
Q[rear]=p->
lchild;
rear=(rear+1)%MaxLength;
}
rchild)//右孩子不为空,入队
rchild;
boolComplete(BiTreeT)
if(T==NULL)//根结点入队
returntrue;
while(front!
p=Q[front];
front=(front+1)%MaxLength;
if(p)
{
Q[rear]=p->
rear=(rear+1)%MaxLength;
}
else
{
while(front!
{
p=Q[front];
if(p)
{
returnfalse;
}
else
returntrue;
}
}
intDepth(BiTreeT)
intdepthval,depthleft,depthright;
if(!
T)
depthval=0;
depthleft=Depth(T->
depthright=Depth(T->
depthval=1+(depthleft>
depthright?
depthleft:
depthright);
returndepthval;
intCountleaf(BiTreeT)
intm,n;
return0;
lchild&
&
!
rchild)
return1;
m=Countleaf(T->
n=Countleaf(T->
return(m+n);
intCountleafs(BiTreeT)
m=Countleafs(T->
n=Countleafs(T->
return(m+n+1);
BiTree.cpp文件
#include"
BiTree.h"
voidmain()
MadebyFly!
!
~~"
endl;
请输入二叉树序列,如:
AB#C##D##"
BiTreetree;
CreateBiTree(tree);
二叉树创建完成!
先序遍历二叉树输出结果:
PreOrder(tree);
中序遍历二叉树输出结果:
InOrder(tree);
后序遍历二叉树输出结果:
PostOrder(tree);
层次遍历二叉树输出结果:
LevelOrder(tree);
层次遍历二叉树判定是否为完全二叉树:
boolt=Complete(tree);
if(t)
此二叉树是完全二叉树。
此二叉树不是完全二叉树。
此二叉树的深度为:
intm=Depth(tree);
m<
此二叉树的总结点个数为:
intn=Countleafs(tree);
n<
此二叉树的叶子结点个数为:
inta=Countleaf(tree);
a<