二叉树家谱系统
基本內(nèi)容
實驗內(nèi)容:基于二叉樹來存儲家譜關(guān)系,同時實現(xiàn)1.后序遞歸遍歷算法。2.前序非遞歸遍歷算法。3.輸入指定人物代號,查詢其所有長輩的功能。
首先需要將要存儲的族譜轉(zhuǎn)化為輸入的字符串,再通過輸入的字符串創(chuàng)建族譜二叉樹。
規(guī)定輸入形式為括號表達式:A(B(C,D(,E)),)
其表示的樹為
程序架構(gòu)
主程序
首先輸入括號表達式,然后通過該括號表達式,初始化一個樹,隨后調(diào)用前序遍歷非遞歸函數(shù),后序遍歷遞歸函數(shù),以及輸入一個人物代號,找到其所有長輩,驗證程序的正確性。
樹模板類
- 二叉樹的建立 - 分析:樹的每個節(jié)點包含三個域,一個數(shù)據(jù)域,一個指向左孩子的指針,一個指向右孩子的指針。包含一個節(jié)點指針變量,指向根節(jié)點。
- 通過輸入的括號表達式,逐個字符判斷,若遇到左括號,表示下一個遇到的字符為左孩子,則k=1,同時表示該節(jié)點擁有子節(jié)點,則將該節(jié)點入棧;若遇到逗號,表示下一個遇到的字符為右孩子,則k=2;若遇到右括號表示該塊讀取完成。若讀取為字符,則通過k的值,添加棧頂?shù)墓?jié)點左右孩子節(jié)點。
- template<typename T> void BTree<T>::init(T c[]) {char ch;BNode<T> *stack[MaxSize], *p;int top = -1, k = 0, j = 0;while ((ch = c[j++]) != '\0') {switch (ch) {case '(': {top++;stack[top] = p;k = 1;break;}case ',': {k = 2;break;}case ')': {top--;break;}default: {p = new BNode<T>;p->data = ch;p->lchild = p->rchild = NULL;if (this->b == NULL) {this->b = p;} else {switch (k) {case 1:stack[top]->lchild = p;break;case 2:stack[top]->rchild = p;break;}}}}} }
 
- 后序遍歷遞歸算法 - template<typename T> void BTree<T>::PostOrderRe(BNode<T> *b) {if (b != NULL) {PostOrderRe(b->lchild);PostOrderRe(b->rchild);cout << b->data << " ";} }
 
- 前序遍歷非遞歸算法 - 非遞歸實現(xiàn),則使用棧來存儲遍歷過的父節(jié)點。
- template<typename T> void BTree<T>::PreOrderNotRe() {cout << "先序遍歷非遞歸算法輸出為:";BNode<T> *stack[MaxSize];BNode<T> *p = this->b;int top = -1;while (p != NULL || top != -1) {if (p != NULL) {cout << p->data << " ";top++;stack[top] = p;p = p->lchild;} else {p = stack[top];top--;p = p->rchild;}}cout << endl; }
 
-  得到要查詢?nèi)宋锏乃凶嫦?/p> -  通過定義flag標志,查詢是否找到了該被查詢?nèi)宋铩Mㄟ^遞歸后序遍歷查詢,若查詢到了,則令flag=1,而回溯時,flag==1,則輸出該節(jié)點,即為被查詢?nèi)宋镒嫦?/p> 
- template<typename T> void BTree<T>::FindAllAncestor(BNode<T> *b, char object) {if (b != NULL) {FindAllAncestor(b->lchild, object);FindAllAncestor(b->rchild, object);if (flag == 1) {cout << b->data << " ";}if (b->data == object) flag = 1;} }
 
-  
程序驗證
?
?
總結(jié)
 
                            
                        - 上一篇: linux shell 生成图片,she
- 下一篇: 快鲸租赁管理系统能实现哪些功能?
