用户注册



邮箱:

密码:

用户登录


邮箱:

密码:
记住登录一个月忘记密码?

发表随想


还能输入:200字
云代码 - c++代码库

二叉树链表

2017-09-14 作者:云代码会员举报

[c++]代码库

#include<stdio.h>
#include<stdlib.h>
//二叉树结点
typedef struct Bitnode{
	char data;
	struct Bitnode *lchild,*rchild;
}*Bitree;
//链表结点
typedef struct Node{
char  data;
int lchild;
int rchild;
}node;
node  Array[100];
static int length=0;
const int MaxLength=100;
//创建二叉树
void CreateBitree(Bitree &t)
{
    char ch;
    scanf("%c",&ch);
        if(ch=='#')
		t=NULL;
	else
	{
		t=(Bitnode *)malloc(sizeof(Bitnode));
		t->data=ch;

		CreateBitree(t->lchild);
		CreateBitree(t->rchild);
	}

}
//前序遍历
void inordertraverse(Bitree t)
{
    if(t)
    {
        printf("%c",t->data);
        length++;
		Array[length].data=t->data;
        inordertraverse(t->lchild);
        inordertraverse(t->rchild);
    }

}
//后序遍历
void postordertraverse(Bitree t)
{
    if(t)
    {
        inordertraverse(t->lchild);
        inordertraverse(t->rchild);
        printf("%c",t->data);
    }
}
//层次遍历
void Leveltaverse(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;
   printf("%c",p->data);
   if(p->lchild){
   Q[rear]=p->lchild;
   rear=(rear+1)%MaxLength;
}
   if(p->rchild){
   Q[rear]=p->rchild;
   rear=(rear+1)%MaxLength;
}
}

}
//二叉树链表
 void Bitreelist(Bitree t)
{
	int i,j;
	if(t)
	{
		j=1;
        while(t->data!=Array[j].data)
			j++;
		if(t->lchild!=NULL)
		{
			i=1;
			while(t->lchild->data!=Array[i].data)
				i++;
            Array[j].lchild=i;
		}
		else
			Array[j].lchild=0;
		if(t->rchild!=NULL)
		{
			i=1;
			while(t->rchild->data!=Array[i].data)
				i++;
            Array[j].rchild=i;
		}
		else
			Array[j].rchild=0;
		Bitreelist(t->lchild);
		Bitreelist(t->rchild);
	}
}

int main()
{
	Bitree t1;
	printf("请输入二叉树结点值:");
	CreateBitree(t1);
	printf("\n");
	printf("二叉树先序遍历:");
	inordertraverse(t1);
	printf("\n");
	printf("二叉树后序遍历:");
	postordertraverse(t1);
	printf("\n");
	printf("二叉树层次遍历:");
	Leveltaverse(t1);
	printf("\n");
	printf("\n");
	Bitreelist(t1);
	printf("二叉树的静态二叉链表为:\n");
	printf("下标\tlchil\tdata\trchild\n");
	for(int j=1;j<=length;j++)
	 {
      printf("%d\t%d\t%c\t%d\n", j,Array[j].lchild, Array[j].data, Array[j].rchild);
	 }

    return 0;
}
//ABD##E##CFH###G##


分享到:
更多

网友评论    (发表评论)

共1 条评论 1/1页

发表评论:

评论须知:

  • 1、评论每次加2分,每天上限为30;
  • 2、请文明用语,共同创建干净的技术交流环境;
  • 3、若被发现提交非法信息,评论将会被删除,并且给予扣分处理,严重者给予封号处理;
  • 4、请勿发布广告信息或其他无关评论,否则将会删除评论并扣分,严重者给予封号处理。