c语言树
❶ c语言二叉树
函数设计有问题,不能用递归插入,你那是死循环
❷ C语言树的额
更具公式:
n[m]*(m - 1) + n[m - 1]*(m - 2).....+n[4]*3 + n[3]*2+n[2]*1 + n[1]*0 + 1= n[0]。
注:n[m]指度为m的结点的数量,n[m - 1]指为m - 1的结点的数量....以此类推。
所以,在本题中n[3]=2,n[2] = 1.带入公式2*2+1*1 + 1 = 6。选D
❸ 用c语言输出树
假设输出这棵树:
.....7
..../.\
...5...6
../\.../\
.1..2.3..4
其中.代表空格
首先不论你用什么方法(先根,中根,后根),将树读入一个数组
然后计算各层的结点数,当然也可以在遍历的同时,将各层的结点数用一个数组保存起来
然后用for循环控制输出的层数(注意,将"/","\"所占层数也考虑进去),
然后具体输出各层,至于每个结点,以及"/"和"\"间各空多少空格,
自己多输出几次看看效果,调整就可以了
❹ 数据结构-C语言-树
现在超过30岁就不要了,实话实说,我们公司就是
❺ C语言中的树和图有什么用
在程序设计当中,树和图是两种常见的数据结构,在计算机技术应用十分广泛,他们也是两种思考问题的方式,常用于结局实际问题。树最直观的用途就是如人类社会的族谱和各种社会组织机构都可用树形象表示。树在计算机领域中也得到广泛应用,如在编译源程序如下时,可用树表示源源程序如下的语法结构。在数据库系统中,树型结构也是信息的重要组织形式之一,一切具有层次关系的问题都可用树来描述。数据结构的图就是实际情况的抽象,即逻辑模型,然后通过计算机编程来解决问题。比如一个很复杂的地图,有很多城市,有很多路,如何找出最短路径呢?当然是用计算机来算了,就得用图来表示等等。
数据结构是计算机存储、组织数据的方式。数据结构是指相互之间存在一种或多种特定关系的数据元素的集合。通常情况下,精心选择的数据结构可以带来更高的运行或者存储效率。数据结构往往同高效的检索算法和索引技术有关。
数据的逻辑结构:指反映数据元素之间的逻辑关系的数据结构,其中的逻辑关系是指数据元素之间的前后件关系,而与他们在计算机中的存储位置无关。逻辑结构包括:
a.集合
数据结构中的元素之间除了“同属一个集合” 的相互关系外,别无其他关系;
b.线性结构
数据结构中的元素存在一对一的相互关系;
c.树形结构
数据结构中的元素存在一对多的相互关系;
d.图形结构
数据结构中的元素存在多对多的相互关系。
❻ 关于c语言二叉树
完全二叉树除了第一层和最后一层外,其余各层的结点数都是2的幂,所以都是偶数,因此,当最后一层的结点数为偶数时,树的总结点数才可能是奇数.
而完全二叉树只有最后一层的结点数为奇数时,树中才可能存在唯一的度为1的结点,即最后一个结点的父结点.但现在最后一层结点数为偶数,所以树中不存在度为1的结点,即n1=0.
所以n=n0+n2=2n0-1=699,n0=350
❼ c语言:二叉树
system("cls");//清屏
printf("input tree node elem(elem-->left-->right):\n");//屏幕上输出--请输入树节点元素,(元素-->左--》右) 如何输入,要看Pre_Create_BT函数
❽ c语言中的树是什么意思,集合又怎么跟编程有关
树就是相当于图,里面有很多个 顶点 很多个边 边连接顶点 。
编程可以和任何你能想象出来的东西有关,集合在数据结构里面关系比较大,比如结构体就是一个集合。
堆是一种数据结构,常用于堆排序算法。
❾ c语言 二叉树
等级考试不考树的语言方面啊。知道原理就行了。那里是很难你做做卷子啊,很快就明白了。插入删除不同吧,别都背下来,它考的时候有侧重,我记得我考试的时候就是做的历年的卷子,真的不难。语言都是简单的英语,没基础也没有关系的。考试刚考过一次了,3月第三那个周末,9月第3个周末吧。。。。上机我觉得简单,你要相信自己人品超好能抽到简单题,我那道编程真的不会啊,最后就靠前面的那60都写了刚好六十。建议你买套卷子来看把,比看书有效果多了。上机有题库的。06年以后的都能用教育出版社好像。是在不明白就背过来。我这大家都是那么过的。。。
❿ 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);
}