題目:編寫先序遍曆一般樹的遞迴演算法。設樹的結點結構為孩子兄弟標記法。
1.需求分析
輸入:先序遍曆樹的序列
輸出:先序遍曆樹的序列
2.概要設計
1)
把一般的樹轉化成二叉樹的孩子兄弟標記法(使用者完成)
2)
先序遍曆的順序在電腦中建立和儲存這個樹
3)
程式以先序遍曆的順序訪問樹中每個節點的元素,並呈現給使用者
3.詳細設計
4.調試分析
更好的方法是以直觀的方式顯示一顆樹,而不是一串字元。
5.使用說明
以先序遍曆的順序輸入一顆樹,斷行符號,查看遍曆結果。
6.測試結果
第一組:
按前序走訪的順序,建立樹(用#代替結束符):ABE#F##CG##D###
A B E
F
C G
D
每一行是一個左枝
第二組:
按前序走訪的順序,建立樹(用#代替結束符):ABC####
A B C
每一行是一個左枝
7.附錄
來源程式檔案清單。
#include "stdafx.h"<br />#include <iostream></p><p>//用孩子兄弟標記法,定義樹的節點結構<br />typedef struct CSNode<br />{<br />char data;//資料元素的類型為char<br />struct CSNode* firstSon;//指向第一個孩子的指標<br />struct CSNode* nextSibling;//指向下一個兄弟的指標<br />}*CSTree;</p><p>//按照先序遍曆的順序,建立樹<br />CSNode *CreateTree()<br />{<br />CSNode *p;//根節點<br />char dt=getchar();//接收資料<br />if (dt=='#')<br />{<br />return NULL;<br />}<br />else<br />{<br />p=new CSNode();<br />p->data=dt;<br />p->firstSon=CreateTree();<br />p->nextSibling=CreateTree();<br />return p;<br />}<br />}<br />//按照先序遍曆的順序,訪問樹的節點元素<br />void PreOrder(CSTree T)<br />{<br />if (T!=NULL)<br />{<br />printf("%c ",T->data);<br />PreOrder(T->firstSon);<br />printf("/n");<br />PreOrder(T->nextSibling);<br />}<br />}<br />int _tmain(int argc, _TCHAR* argv[])<br />{<br />printf("按前序走訪的順序,建立樹(用#代替結束符):");<br />CSNode *t=CreateTree();<br />PreOrder(t);<br />printf("每一行是一個左枝/n");<br />system("pause");<br />return 0;<br />}<br />