当前位置:首页 » 编程语言 » c语言输出一个奇怪的数
扩展阅读
webinf下怎么引入js 2023-08-31 21:54:13
堡垒机怎么打开web 2023-08-31 21:54:11

c语言输出一个奇怪的数

发布时间: 2022-06-04 06:31:18

c语言中写递归来前序输出一颗树,但最后运行变成死循环

没有赋值给child

⑵ 急急急!!!怎么用C语言输出一个完全二叉树!!!就不是C++也不是JAVA,要C编的代码,在线等QAQ

一般来说还是要用到递归的。。。

⑶ C语言数据结构,二叉树问题,输出一个二叉树问题

这个几乎都江堰市给回老师了

⑷ 用c语言输出树

假设输出这棵树:
.....7
..../.\
...5...6
../\.../\
.1..2.3..4
其中.代表空格

首先不论你用什么方法(先根,中根,后根),将树读入一个数组
然后计算各层的结点数,当然也可以在遍历的同时,将各层的结点数用一个数组保存起来
然后用for循环控制输出的层数(注意,将"/","\"所占层数也考虑进去),
然后具体输出各层,至于每个结点,以及"/"和"\"间各空多少空格,
自己多输出几次看看效果,调整就可以了

⑸ c语言_树

我很奇怪,不用先序中序或者中序后序,你如何能确定一棵唯一的树呢,不能确定树如何来遍历等等。。。。。。。。。。

参考一下
一、 实验名称:二叉树的建立和遍历
二、 实验目的:练习递归算法
三、 实验内容:在上一次实验的基础之上增加以下功能
a) 统计二叉树深度
b) 统计二叉树中叶子个数
c) 二叉树中所有左右子树交换
四、 实验步骤
#include<stdio.h>
#include<iostream.h>
#include<stdlib.h>
#define size 100
typedef struct BiTNode
{
char data;
struct BiTNode *lchild, *rchild;
} binode, *bitree;
typedef struct
{
bitree data[size];
int tag[100];
int top;
}sqstack;

void initstack(sqstack &t)
{
t.top=-1;
}
int stackempty(sqstack t)
{
if(t.top==-1)
return 1;
else
return 0;
}
int gettop(sqstack &t,bitree &a)
{
if(t.top==-1)
return 0;
else
{
a=t.data[t.top];
t.top--;
return 1;
}
}
int push(sqstack &t,bitree &a)
{
if(t.top==size-1)
return 0;
else
{
t.data[++t.top]=a;
return 1;
}
}
int pop(sqstack &t,bitree &a)
{
if(t.top==-1)
return 0;
else
{
a=t.data[t.top--];
return 1;
}
}
void createbitree(bitree &T,char a[],int la,int ha,char b[],int lb,int hb)
{
int m;
char c;
if(la>ha)
T=NULL;
else
{
if(!(T=(bitree)malloc(sizeof(binode))))
exit(0);
else
{
T->data=a[la];
m=lb;
while(b[m]!=a[la]) m++;
createbitree(T->lchild,a,la+1,la+m-lb,b,lb,m-1);
createbitree(T->rchild,a,la+m-lb+1,ha,b,m+1,hb);
}
}
}
int createbitree(bitree &T)
{
char a[5], b[5];
int i, j, n;
char ch;
n=0;
printf("abcd*badc\n");
scanf("%c", &ch);
while( ch!='*' ) { a[n++]=ch; scanf("%c", &ch);}
for(i=0; i<n; i++) scanf("%c", &b[i]);
createbitree(T, a, 0, n-1, b, 0, n-1);

}
int preorder (bitree p)
{
sqstack S;
initstack(S);
printf("先序遍历\n");
while(!stackempty(S) || p!=NULL)
{
while(p!=NULL) //指向左子树
{
printf("%c ",p->data);
push(S,p); //非空时入栈
p=p->lchild;
}
pop(S,p); //指针出栈

p=p->rchild;
}
printf("\n");
}
int inorder (bitree p)
{
sqstack s;
initstack(s);
printf("中序遍历\n");
while(!stackempty(s)||p)
{
if(p)
{
push(s,p);
p=p->lchild;
}
else
{
pop(s,p);
printf("%c ",p->data);
p=p->rchild;
}
}
return 1;

}
void postorder(bitree p)
{
printf("\n");
sqstack s;
initstack(s);
printf("后序输出\n");
while(p||!stackempty(s))
{
while(p)
{
s.top++;
s.data[s.top]=p; //子树根结点进栈
s.tag[s.top]=0; //设此根结点标志初始化为0,表示左右孩子都没访问,当访问完左子树 tag 变为1
p=p->lchild; //进入左子树访问。(左子树根结点全部进栈)
}
while((s.top>-1)&&(s.tag[s.top]==1))
{
p=s.data[s.top];
cout<<p->data<<" "; //没有孩子的根结点,也就是它父亲的左孩子或右孩子
s.top--;
}
if(s.top>-1)
{
p=s.data[s.top];
s.tag[s.top]=1; //进入右子树 前,标志tag变为1
p=p->rchild; //进入右子树
}
else
p=NULL;
}
}
void CountLeaf (bitree T, int& count)
{
if ( T )
{
if ((!T->lchild)&& (!T->rchild)) count++;
CountLeaf(T->lchild , count); //统计左子树中叶子个数
CountLeaf(T->rchild ,count); //统计右子树中叶子个数
}
}
int depthval=0,depthLeft=0, depthRight=0;
int Depth (bitree T )
{
if ( !T )
depthval = 0; // depthval是一个全程变量
else
{
depthLeft = Depth( T->lchild );
depthRight = Depth( T->rchild );
depthval = 1 + (depthLeft > depthRight ? depthLeft : depthRight);
}
return depthval;
}
void change(bitree T)
{
bitree p,q;
if(T)
{
p=T->lchild;
T->lchild=T->rchild;
T->rchild=p;
change(T->lchild);
change(T->rchild);
}
}
void main()
{
bitree T;
int count=0;
createbitree(T) ;
preorder(T);
inorder(T);
postorder(T);
CountLeaf (T,count);
printf("\n");
printf("叶子的个数是:%d\n",count);
Depth ( T );
printf("树的深度是:%d\n",depthval);
printf("交换后。。。\n");
change(T);
preorder(T);inorder(T);
postorder(T);
}

⑹ 求c语言数据结构二叉树的建树,前序遍历,输出树的代码,能用采纳。

#include
#include
#define MAXSIZE 100 //二叉树中最多的结点数
typedef char TElemType;
typedef struct BiTNode
{
TElemType data;

struct BiTNode *lchild,*rchild;
}BiTNode,*BiTree;
//定义函数指针
typedef void(* Visit)(BiTree);
//二叉树的初始化
void Init_BiTree(BiTree *T)
{
*T = NULL;
}
//判断二叉树是否为空,返回1
int IsEmpty_BiTree(BiTree *T)
{

return *T == NULL;
}
//创建二叉树
void Create_BiTree(BiTree *T)
{
char ch;
ch = getchar();
//当输入的是"#"时,认为该子树为空

if(ch == '#')

*T = NULL;
//创建树结点
else{

*T = (BiTree)malloc(sizeof(BiTNode));

(*T)->data = ch; //生成树结点
//生成左子树
Create_BiTree(&(*T)->lchild);

//生成右子树
Create_BiTree(&(*T)->rchild);

}
}
//输出结点的值
void Print_BiTreeNode(BiTree T)
{
printf("%c\t",T->data);

}
//先序遍历二叉树
void PreOrder_BiTree(BiTree T,Visit visit)
{
if(!IsEmpty_BiTree(&T))
{
visit(T);

PreOrder_BiTree(T->lchild,visit);
PreOrder_BiTree(T->rchild,visit);

}
}
int main(){
BiTree T;
//将二叉树初始为一个空的二叉树
Init_BiTree(&T);
//创建二叉树
Create_BiTree(&T);
//先序遍历
printf("\n先序遍历结果:");
PreOrder_BiTree(T,Print_BiTreeNode);
return 0;
}

⑺ 用C语言 输出二叉树,要求输出树的形状。 PrintTree(BiTree T,int level)

typedef struct _BinaryTree_
{
ElementType Element;
struct _BinaryTree_ * Left;
struct _BinaryTree_ * Right;
}BiTree;

void PrintTree(BiTree* T,int level)
{
if(level)
{
printf((*T).Element);
if((*T).Left!=NULL)
PrintTree((*T).Left,level--);
if((*T).Right!=NULL)
PrintTree((*T).Right,level--);
}
}

⑻ 用c语言输出圣诞树,在线急等

参考下面代码
#include <stdio.h>
void main()
{
int i,j;

printf("*\n");
for (i=2; i<4; i++)
{
printf(" ");
for (j=1; j<2*i;j++)
printf("*");
printf("\n");
}
for (i=1; i<5; i++)
{
printf(" ");
for (j=1; j<2*i; j++)
printf("*");
printf("\n");
}
for (i=1; i<4; i++)
{
printf(" ");
printf("***\n");
}
}