树的孩子兄弟链表应用
来源:互联网 发布:linux重启tomcat服务 编辑:程序博客网 时间:2024/05/16 15:43
孩子兄弟表示法采用链式存储结构,链表由一个数据域和两个指针域组成。其中,数据域 存放结点的数据信息,一个指针域用来指示结点的第一个孩子结点,另一个指针域用来指示结点的下一个兄弟结点。
#include <stdio.h> #include <stdlib.h> #include <string.h> #include <malloc.h> typedef int ElemType; typedef struct CSNode//孩子兄弟表示法类型定义 { ElemType data; struct CSNode *firstchild,*nextsibling;//指向第一个孩子和下一个兄弟 }CSNode,*CSTree; void InitCSTree(CSTree *T);//树的初始化 void DestroyCSTree(CSTree *T);//树的摧毁操作 void CreateCSTree(CSTree *T,ElemType *e,int *index);//创建树操作 int DepCSTree(CSTree T);//求树的深度 void PreTraverseCSTree(CSTree T,void(*visit)(ElemType *e));//树的先根遍历 void PostTraverseCSTree(CSTree T,void(*visit)(ElemType *e));//树的后根遍历 void DisplayCSTree(ElemType *e);//输出树的结点 #include "Tree.h" void InitCSTree(CSTree *T)//树的初始化 { *T = 0; } void DestroyCSTree(CSTree *T)//树的摧毁操作 { CSTree p = *T; if(p) { DestroyCSTree(&(p->firstchild)); DestroyCSTree(&(p->nextsibling)); free(p); *T = 0; } } void CreateCSTree(CSTree *T,ElemType *e,int *index)//创建树操作 { if(e[*index] == 0) { *T = 0; (*index)++; } else { *T = (CSTree)malloc(sizeof(CSNode)); (*T)->data = e[*index]; (*index)++; CreateCSTree(&((*T)->firstchild),e,index); CreateCSTree(&((*T)->nextsibling ),e,index); return; } } int DepCSTree(CSTree T)//求树的深度 { CSTree p; int k,d = 0; if(T == NULL) { return 0; } p = T->firstchild ; while(p != NULL) { k = DepCSTree(p); if(d < k) { d = k; } p = p->nextsibling ; } return d+1; } void PreTraverseCSTree(CSTree T,void(*visit)(ElemType *e))//树的先根遍历 { if(T) { (*visit)(&T->data); PreTraverseCSTree(T->firstchild ,visit); PreTraverseCSTree(T->nextsibling ,visit); } } void PostTraverseCSTree(CSTree T,void(*visit)(ElemType *e))//树的后根遍历 { if(T) { PostTraverseCSTree(T->firstchild ,visit); (*visit)(&T->data); PostTraverseCSTree(T->nextsibling ,visit); } } void DisplayCSTree(ElemType *e)//输出树的结点 { printf("%2c",*e); } #include "Tree.h" int main(void) { int text[] = {'A','B','E',0,'F','H',0,'I',0,'J',0,0,0,'C',0,'D','G',0,0,0,0}; int h = 0; CSTree T; InitCSTree(&T); CreateCSTree(&T,text,&h); printf("树的先根遍历结果是:\n"); PreTraverseCSTree(T,DisplayCSTree); printf("\n"); printf("树的后根遍历结果是:\n"); PostTraverseCSTree(T,DisplayCSTree); printf("\n"); printf("树的深度是:%2d",DepCSTree(T)); printf("\n"); DestroyCSTree(&T); return 0; }
0 0
- 树的孩子兄弟链表应用
- 树的孩子兄弟链表实现
- 数据结构以孩子兄弟链存储的树的高度
- 树的存储结构(树的二叉链表(孩子—兄弟))
- 层次遍历方法建树,用队。实现树与孩子兄弟二叉链表的转化!
- 一般树的建立(孩子兄弟链表) 、遍历、深度
- 一般树的建立(孩子兄弟链表) 、遍历、深度
- 树的孩子兄弟存储结构
- 树的孩子兄弟表示法
- 求兄弟孩子树的深度
- 树的孩子兄弟表示法
- VC++ 树的孩子兄弟表示法
- 树和森林的孩子兄弟结构
- 左孩子右兄弟的字典树
- 树、森林与二叉树(树的存储结构(树的孩子兄弟链表应用举例),树转换为二叉树,二叉树转换成树和森林,树和森林的遍历)
- 【Trie树】 兄弟孩子写法
- 树-左孩子右兄弟
- 数据结构例程——以孩子兄弟链存储的树的高度
- block
- 2015 多校联赛 ——HDU5319(模拟)
- OpenGL关于glBegin的参数的理解
- UI__UIGestureRecognize
- Object类、JAVA反射机制、Annotation功能
- 树的孩子兄弟链表应用
- 快速排序算法
- 数据结构实验之二叉树的建立与遍历 SDUT
- JSP概述
- APP首次启动引导界面和启动界面设置——iOS开发
- 百练2757最长上升子序列
- IndexError: list index out of range的错误原因
- VS中使用TinyXml操作xml文件
- 计算机网络读书笔记-----网络层