當前位置:首頁 » 操作系統 » 數據結構與演算法作業

數據結構與演算法作業

發布時間: 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