tft每日頭條

 > 科技

 > 數據結構樹與二叉樹的轉換

數據結構樹與二叉樹的轉換

科技 更新时间:2024-05-17 11:16:53

  針對下圖給出的信電學院專業結構關系,選用二叉鍊作為存儲結構,編寫程序完成以下操作:

  (1)按專業大類進行分類,輸出信電學院各專業大類的下屬專業名稱;

  (2)輸入任一專業大類的編号,查找并輸出該專業大類下屬的所有專業名稱及統計其所包含的專業總個數。

  數據結構樹與二叉樹的轉換(二叉樹的創建與查詢)(1)

  解題分析

  1.先将信電學院專業結構圖轉換為對應的二叉樹

  數據結構樹與二叉樹的轉換(二叉樹的創建與查詢)(2)

  二叉樹中每個數據元素,其類型可定義為:

  typedef char ElemType;

  typedef struct node

  { ElemType data; //每個專業名稱用其對應編号表示,輸出時再将編号轉換為字符串

  struct node *lchild,*rchild;

  } BTNode;

  2.用括号表示法表示出上述二叉樹的層次結構

  A(B(F(,G(,H(,I))),C(J(,K),D(L(,M(,N)),E(O)))))

  3.調用創建二叉樹(CreateBTree),先序遍曆二叉樹(PreOrder)和查找二叉樹中指定節點(FindNode)的算法完成題目指定的各功能。

  #includestdio.h #includestdlib.h #includestring.h typedef char ElemType; typedef struct node { ElemType data; struct node *lchild,*rchild; } BTNode; void CreateBTree(BTNode *&b,char *str); BTNode *FindNode(BTNode *b,ElemType x); void search(BTNode *b,ElemType x); void info(char ch); void PreOrder(BTNode *b); void CreateBTree(BTNode *&b,char *str) { BTNode *St[100],*p=NULL; int top=-1,k,j=0; char ch; b=NULL; //建立的二叉樹初始時為空 ch=str[j]; while (ch!=) //str未掃描完時循環 { switch(ch) { case :top ;St[top]=p;k=1; break; //為左孩子節點 case :top--;break; case :k=2; break; //為孩子節點右節點 default: p=(BTNode *)malloc(sizeof(BTNode)); p-p-lchild=p-rchild=NULL; if (b==NULL) //p為二叉樹的根節點 b=p; else //已建立二叉樹根節點 { switch(k) { case 1:St[top]-lchild=p;break; case 2:St[top]-rchild=p;break; } } } j ;ch=str[j]; } } BTNode *FindNode(BTNode *b,ElemType x) { BTNode *p; if (b==NULL) return NULL; else if (b-data==x) return b; else { p=FindNode(b-lchild,x); if (p!=NULL) return p; else return FindNode(b-rchild,x); } } void search(BTNode *b,ElemType x) { BTNode *p,*q; int n=0; p=FindNode(b,x); if(p!=NULL) { q=p- if(q!=NULL) { printf(\n該專業大類包含以下專業:\n info(q- n ; q=q- while(q!=NULL) { info(q- n ; q=q- } printf(\n該專業大類共包含%d個專業。\n } else printf(\n編号%c為專業名稱,不是專業大類名稱,不存在該專業大類! } else printf(\n不存在該專業大類! } void info(char ch) { switch(ch) { case :printf(\n%s\n信電學院(A)break; case :printf(\n\n%s\n計算機類(B)break; case :printf(\n\n%s\n數學類(C)break; case :printf(\n\n%s\n電子類(D)break; case :printf(\n\n%s\n物理類(E)break; case :printf(%s 軟件工程(F)break; case :printf(%s 物聯網工程(G)break; case :printf(%s 數字媒體技術(H)break; case :printf(%s 計算機科學與技術(I)break; case :printf(%s 數學與應用數學(J)break; case :printf(%s 信息與計算科學(K)break; case :printf(%s 通信工程(L)break; case :printf(%s 電子科學與技術(M)break; case :printf(%s 電子與信息工程(N) break; case :printf(%s 應用物理學(O) break; } } void PreOrder(BTNode *b) { if (b!=NULL) { info(b- //訪問根節點 PreOrder(b- PreOrder(b- } } void main() { BTNode *b=NULL; ElemType str[100],name; printf(請輸入括号表示法所表示的二叉樹: gets(str); CreateBTree(b,str); printf(\n\n信電學院的專業結構如下:\n PreOrder(b); printf(\n\n請輸入要查找的專業大類的編号: name=getchar(); search(b,name); }

  運行結果

  請輸入括号表示法所表示的二叉樹:A(B(F(,G(,H(,I))),C(J(,K),D(L(,M(,N)),E(O))))) 信電學院的專業結構如下: 信電學院(A) 計算機類(B) 軟件工程(F) 物聯網工程(G) 數字媒體技術(H) 計算機科學與技術(I) 數學類(C) 數學與應用數學(J) 信息與計算科學(K) 電子類(D) 通信工程(L) 電子科學與技術(M) 電子與信息工程(N) 物理類(E) 應用物理學(O) 請輸入要查找的專業大類的編号:E 該專業大類包含以下專業: 應用物理學(O) 該專業大類共包含1個專業。

  ,

更多精彩资讯请关注tft每日頭條,我们将持续为您更新最新资讯!

查看全部

相关科技资讯推荐

热门科技资讯推荐

网友关注

Copyright 2023-2024 - www.tftnews.com All Rights Reserved