c语言打印树形图形,数据结构C语言版树形结构.ppt
數據結構C語言版樹形結構
St中元素 算法執行的操作 ch AC k=2 , AC 建立E結點,因k=1,將其作為C結點的左孩子結點 E AC C結點進棧,k=1 ( A 建立C結點,因k=2,將其作為A結點的右孩子結點 C A k=2 , A 退棧一次 ) AB 退棧一次 ) ABD 建立E結點,因k=2,將其作為D結點的右孩子結點 G ABD k=2 , ABD D結點進棧,k=1 ( St中元素 算法執行的操作 ch ? 算法結束 ch掃描完畢 空 退棧一次 ) A 退棧一次 ) AC 建立F結點,因k=2,將其作為C結點的右孩子結點 F 生成的二叉樹=> (2)查找結點FindNode(*b,x) 采用先序遍歷遞歸算法查找值為x的結點。找到后返回其指針,否則返回NULL。算法如下: 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); } } (3)找孩子結點LchildNode(p)和RchildNode(p) 直接返回*p結點的左孩子結點或右孩子結點的指針。算法如下: BTNode *LchildNode(BTNode *p) { return p->lchild; } BTNode *RchildNode(BTNode *p) { return p->rchild; } (4)求高度BTNodeDepth(*b) 求二叉樹的高度的遞歸模型f()如下: f(NULL)=0 f(b)=MAX{f(b->lchild),f(b->rchild)}+1 其他情況 對應的算法如下: int BTNodeDepth(BTNode *b) { int lchilddep,rchilddep; if (b==NULL) return(0); /*空樹的高度為0*/ else { lchilddep=BTNodeDepth(b->lchild); /*求左子樹的高度為lchilddep*/ rchilddep=BTNodeDepth(b->rchild); /*求右子樹的高度為rchilddep*/ return(lchilddep>rchilddep)? (lchilddep+1):(rchilddep+1); } } (5)輸出二叉樹DispBTNode(*b) 其過程是:對于非空二叉樹b,先輸出其元素值,當存在左孩子結點或右孩子結點時,輸出一個“(”符號,然后遞歸處理左子樹,輸出一個“,”符號,遞歸處理右子樹,最后輸出一個“)”符號。對應的遞歸算法如下: void DispBTNode(BTNode *b) {if (b!=NULL) { printf("%c",b->data); if (b->lchild!=NULL || b->rchild!=NULL) { printf("("); DispBTNode(b->lchild); /*遞歸處理左子樹*/ if (b->rchild!=NULL) printf(","); DispBTNode(b->rchild); /*遞歸處理右子樹*/ printf(")"); } } } 例7.3 假設二叉樹采用二叉鏈存儲結構,設計一個算法判斷兩棵二叉樹是否相似,所謂二叉樹t1和t2是相似的指的是t1和t2都是空的二叉樹;或者t1和t2的根結點是相似的,以及t1的左子樹和t2的左子樹是相似的且t1的右子樹與t2的右子樹是相似的。 解:判斷兩棵二叉樹是否相似的遞歸模型f()如下: f(t1,t2)=true 若t1=t2=NULL f(t1,t2)=false 若t1、t2之一為NULL,另一不為NULL f(t1,t2
總結
以上是生活随笔為你收集整理的c语言打印树形图形,数据结构C语言版树形结构.ppt的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: stm8s跳出中断程序c语言,stm8s
- 下一篇: Linux编辑启动、停止与重启sprin