当前位置:首页 » 操作系统 » 数据结构与算法作业

数据结构与算法作业

发布时间: 2023-03-05 17:51:30

⑴ 数据结构算法设计——统计二叉树叶子结点的个数,并输出结果

代码如下:

#include<stdio.h>

#include<stdlib.h>

typedef struct BiTNode

{

char data;

struct BiTNode *lchild,*rchild;

}BiTNode,*BiTree;

void CreatTree(BiTree &A)

{

char ch;

scanf("%c",&ch);

if(ch=='#')

{

A=NULL;

}

else

{

A=new BiTNode;

A->data=ch;

CreatTree(A->lchild);

CreatTree(A->rchild);

}

}

int NodeTree(BiTree A)

{

if(A==NULL)

return 0;

else if(A->lchild==NULL&&A->rchild==NULL)

return 1;

else

return NodeTree(A->lchild)+NodeTree(A->rchild);

}

int main()

{

BiTree A;

int b;

printf("先序法赋值(空用#表示):");

CreatTree(A);

b=NodeTree(A);

printf("共有%d个叶子节点 ",b);

}

(1)数据结构与算法作业扩展阅读

二叉树的性质

1、对于任意一棵二叉树,如果其叶结点数为N0,而度数为2的结点总数为N2,则N0=N2+1;

2、有N个结点的完全二叉树各结点如果用顺序方式存储,则结点之间有如下关系:

若I为结点编号则 如果I>1,则其父结点的编号为I/2;

如果2*I<=N,则其左孩子(即左子树的根结点)的编号为2*I;若2*I>N,则无左孩子;

如果2*I+1<=N,则其右孩子的结点编号为2*I+1;若2*I+1>N,则无右孩子。

3、给定N个结点,能构成h(N)种不同的二叉树。h(N)为卡特兰数的第N项。h(n)=C(2*n,n)/(n+1)。

4、设有i个枝点,I为所有枝点的道路长度总和,J为叶的道路长度总和J=I+2i[2]

⑵ 数据结构与算法试题,高分,求答案啊

给你第一题解法吧:后面的实在是不想做。

先根:ABCDEFGHI

中根:CBEDAGFHI

遍历的基本方法:先左子树后右子树。

1,先根遍历可以确定根节点为A,

2,依据1步,可以在中根遍历中确定左子树为:CBED,右为:GFHI

3,在可以重复1,2步。就可以得到结果。

A

BF

CDGH

I

4,O(n^3)+O(1)

⑶ 数据结构与算法作业:用C语言编程随机生成一个迷宫,然后找出从入口到出口的路线图。急!

几点说明:
1.本程序是动态的,运行后自动寻找迷宫出路
2.本程序对C语言刚学完的有很大的意义.
3.四周是墙,坐标(1,1)是入口,右下脚是出口
声明:本程序用VC调试是无法通过的需要修改
本程序调试工具是TC.....................
#include "graphics.h"
#include "dos.h"
#include "stdlib.h"
#include "process.h"

#define MAX_COL 14/*定义迷宫大小*/
#define MAX_ROW 14

typedef struct
{ int vert;
int horiz;
}offsets;

mapture(int i,int j,int k);/*标记迷宫,(i,j)标记为k模式*/
initmaze();/*初始化迷宫数组*/
findmaze(int i,int j);/*找到了(i,j)可走,标记*/
mapmaze();/*画出原始迷宫*/
int findpath(int row,int col);/*递归函数,找出迷宫路径*/
mapbar();/*画出方格*/
initgrap();/*初始化VGA*/
print();/*迷宫走完后,输出是否成功 */

int startx=50,starty=50;/*画图的屏幕坐标*/
int maze[MAX_ROW][MAX_COL];
offsets move[8]={{0,1},{1,1},{-1,1},{1,0},{-1,0},{0,-1},{1,-1},{-1,-1}}; /*8个方向寻找*/

initmaze()/*初始化迷宫数组 */
{ int i,j;

for(i=0;i<MAX_ROW;i++)/*迷宫四周设置为1 代表墙*/
{ maze[i][0]=1;
maze[i][MAX_COL-1]=1;
}
for(i=0;i<MAX_COL;i++)
{ maze[0][i]=1;
maze[MAX_ROW-1][i]=1;
}
randomize();
for(i=1;i<MAX_ROW-1;i++)/*迷宫图形随机产生 1表示不通 0表示可行*/
for(j=1;j<MAX_COL-1;j++)
{
maze[i][j]=random(2);
}

}

findmaze(int i,int j)/*找到 (i,j)可走*/
{
mapture(j,i,2);/*在图形上标记*/
sleep(1);

}

returnmaze(int i,int j)/*找到(i,j)可走 ,但下一步无路走则标记*/
{

mapture(j,i,3);/*在图形上标记*/
sleep(1);
}

print(int i)/*迷宫走完后,输出是否成功*/
{ settextstyle(1,0,5);
if(i==1)
outtextxy(340,400,"Ture path!");
else if(i==2)
outtextxy(340,400,"No path!");

}

int findpath(int row,int col)/*用递归法找迷宫*/
{ int direct,next_row,next_col;
direct=0;
maze[1][1]=2;
mapture(1,1,2);
sleep(1);
while(direct<8)/*8个方向寻找*/
{ next_row=row+move[direct].vert;/*设置下一步坐标*/
next_col=col+move[direct].horiz;
if(maze[next_row][next_col]==0) /*可走,便标记*/
{ maze[next_row][next_col]=2;
findmaze(next_row,next_col) ;
if(next_row==(MAX_ROW-2)&&next_col==(MAX_COL-2))/*找到出口退出程序*/
{ print(1);
getch();
exit(0);
}
else
findpath(next_row,next_col);/*没有到出口继续递归*/
maze[next_row][next_col]=3;
returnmaze(next_row,next_col);
}
direct++;
}
return(row);
}

TC调试良好

热点内容
红米note扩展存储卡 发布:2025-08-20 21:27:10 浏览:862
验证你的电子邮件地址不能连接服务器 发布:2025-08-20 21:27:09 浏览:63
存储区是什么意思 发布:2025-08-20 21:26:31 浏览:53
压缩袋是什么 发布:2025-08-20 20:48:27 浏览:618
服务器减容会有什么影响 发布:2025-08-20 20:40:23 浏览:150
我的世界怎么联服务器 发布:2025-08-20 20:34:31 浏览:498
c语言编译或解释 发布:2025-08-20 20:27:17 浏览:601
vsm编程 发布:2025-08-20 20:16:31 浏览:913
脚本刷黑石塔 发布:2025-08-20 19:50:08 浏览:982
网上学编程可靠吗 发布:2025-08-20 19:45:13 浏览:650