C++创建二叉树及操作

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

#include

#include

#include

#define OK 1

#define ERROR 0

#define OVERFLOW -2

typedef char ElemType;

const int MaxLength=30;//结点个数不超过30个

typedef struct BiTreeNode{

ElemType data;

struct BiTreeNode *lchild,*rchild;

}BiTreeNode,*BiTree;

void CreateBiTree(BiTree &T)

{

ElemType ch;

cin>>ch;

if(ch=='#')

T = NULL;

else

{

if (!(T = new BiTreeNode))

exit(OVERFLOW);

T->data = ch; // 生成根结点

CreateBiTree(T->lchild); // 构造左子树

CreateBiTree(T->rchild); // 构造右子树

}

} // CreateBiTree

void PreOrder(BiTree &T)//递归函数:先序遍历以T为根的二叉树。

{

if(T !=NULL) //递归结束条件

{

cout<data<<" ";//访问根结点

PreOrder(T->lchild); //先序遍历根的左子树

PreOrder(T->rchild); //先序遍历根的右子树}

}

void InOrder(BiTree &T)//递归函数:中序次序遍历以T为根的子树。

{

if(T !=NULL) //NULL是递归终止条件

{

InOrder(T->lchild); //中序遍历根的左子树

cout<data<<" "; //访问根结点

InOrder(T->rchild); //中序遍历根的右子树}

}

void PostOrder(BiTree &T)//递归函数:后序次序遍历以T为根的子树。

{

if(T !=NULL) //NULL是递归终止条件

{

PostOrder(T->lchild); //后序遍历根的左子树

PostOrder(T->rchild); //后序遍历根的右子树

cout<data<<" "; //访问根结点

}

}

void LevelOrder(BiTree T)//层序遍历{

BiTree Q[MaxLength];

int front=0,rear=0;

BiTree p;

if(T)//根结点入队

{

Q[rear]=T;

rear=(rear+1)%MaxLength;

}

while(front!=rear)

{

p=Q[front]; //队头元素出队

front=(front+1)%MaxLength;

cout<data<<" ";

if(p->lchild)//左孩子不为空,入队

{

Q[rear]=p->lchild;

rear=(rear+1)%MaxLength;

}

if(p->rchild)//右孩子不为空,入队

{

Q[rear]=p->rchild;

rear=(rear+1)%MaxLength;

}

}

}

bool Complete(BiTree T)

{

BiTree Q[MaxLength];

int front=0,rear=0;

BiTree p;

if(T==NULL)//根结点入队

{

return true;

}

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)

{

return false;

}

else

{

return true;

}

}

}

}

return true;

}

}

int Depth(BiTree T)

{

int depthval,depthleft,depthright;

if(!T)

{

depthval=0;

}

else

{

depthleft = Depth(T->lchild);

depthright = Depth(T->rchild);

相关文档
最新文档