永发信息网

中序遍历和层次遍历相同的二叉树的特征

答案:2  悬赏:60  手机版
解决时间 2021-02-05 02:35
中序遍历和层次遍历相同的二叉树的特征
最佳答案
只有右子树的二叉树
全部回答

#include<stdlib.h>

#include<stdio.h>

#define stack_init_size 100//栈初始分配的空间数

#define stackincreament 10//栈空间不够时增加的空间数

typedef char eletype;//二叉树结点信息类型

typedef struct bitnode//二叉树结点类型

{

struct bitnode *lchild,*rchild;

eletype data;

}bitnode;

typedef bitnode *elemtype;//elemtype声明为指针类型

typedef struct stack//栈的存储类型,采用动态分配

{

elemtype *base;

elemtype *top;

int stacksize;

}sqstack;

sqstack *initstack()//创建栈

{

sqstack *s;

if (!(s = (sqstack *)malloc(sizeof(sqstack))))exit(-1);

s->base = (elemtype *)malloc(stack_init_size*sizeof(elemtype));//初始化为栈分配stack_init_size个elemtype类型的空间

if (!s->base)//分配空间失败

{

exit(-2);

printf("栈空间分配失败!\n");

}

if (s->base)//分配空间成功

printf("栈空间分配成功!\n");

s->top = s->base;//初始化栈的头尾指针

s->stacksize = stack_init_size;

return s;

}

void push(sqstack *s,elemtype e)//压栈,e要是一个地址

{

if (s->top-s->base>=s->stacksize)//栈满

{

s->base = (elemtype *)realloc(s->base,(s->stacksize+stackincreament)*sizeof(elemtype));//栈满时增加空间

if (!s->base)//增加分配空间失败

exit(-2);

s->stacksize += stackincreament;

}

*(s->top) = e;

s->top++;

}

elemtype pop1(sqstack *s)//出栈1,返回的e为栈顶元素是一个地址

{

elemtype e;

if (s->top == s->base)return 0;//栈空时返回

s->top--;

e = *(s->top);

return e;

}

int stackempty(sqstack *s)//判断栈空,栈空返回1,否则返回0

{

if (s->base == s->top)return 1;

else return 0;

}

bitnode *createbitree()//先序递归法建树

{

char x;

bitnode *t;

scanf("%c",&x);

if (x == ' ')t = null;

else

{

if (!(t = (bitnode *)malloc(sizeof(bitnode))))exit(-1);

t->data = x;//建立节点

t->lchild = createbitree();//建左子树

t->rchild = createbitree();//建右子树

}

return t;

}

int inorder(bitnode *t)//中序遍历二叉树非递归算法

{

sqstack *s;

bitnode *p;

s = initstack();//初始化栈

p = t;

printf("中序遍历二叉树,字符序列为:\n");

while (p||!stackempty(s))

{

while (p)//找最左结点

{

push(s,p);

p = p->lchild;//p指针顺lchild而下

}

p = pop1(s);//栈顶元素出栈以访问最左结点

printf("%c",p->data);//访问最左结点

p = p->rchild;

}

printf("\n");

return 1;

}

void main()

{

bitnode *t;

printf("请输入建树字符序列,以空格表示null:\n");

t = createbitree();

inorder(t);

}

我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
【exactly是什么意思】exactly什么意思
荷兰豆炒多久能熟,不放水焖,就直接油炒,要
马自达3备用钥匙可以启动车子吗?
有两天时间去游丹霞山,想看日出日落,如何安
请问下工伤认定申请表中有项申请事项一栏怎么
澳洲房产可以由子女继承吗
甲公司2012年度发生的有关交易或事项有:持有
ipad air 充电慢电量用的快怎么回事?
我昨天做的双眼皮手术后肿得像红腊肠的怎么办
形容壮年的词语
雅马哈踏板摩托车咋样
在人体中,所有细胞的染色体数目都完全一样。
一平板电容器两板间距为d,两板间用两种介质
三相发电机用单相AVR可以吗?有什么副作用?
花园小吃地址在哪,我要去那里办事
推荐资讯
水浒传中的孙二娘的绰号
台湾人说的欧卡阿妈啥意思
下列有机物中,不是构成人体细胞主要原料的是
志丹县金丁镇畜牧兽医站在哪里啊,我有事要去
碧医生祛斑美白专业理发地址有知道的么?有点
University of California,是美国什么学校
姜堰区工商局怎么去啊,我要去那办事
【完整的反义词】完整的反义词
【索取的近义词是什么】索取的近义词是什么?
史上最好看和最难看的男明星
本布台音阿达格我想知道这个在什么地方
淄博市为什么不增加街道办事处?
正方形一边上任一点到这个正方形两条对角线的
阴历怎么看 ?