用递归的方法求树的高度、度
来源:互联网 发布:申请网络预约出租车 编辑:程序博客网 时间:2024/06/05 12:00
#include "error.h"#include <stdio.h>#include <stdlib.h>//**!!此题需要给树链表和孩子链表,创建头节点;struct _treeNode; //事先申明;//孩子节点链表的类型;typedef struct _childNode{struct _treeNode *childNode;struct _childNode *next;}ChildNode;//树节点类型typedef char TreeData;typedef struct _treeNode{TreeData data; struct _treeNode *parent; //指向父节点的指针struct _treeNode *next; //指向链表下一个节点的指针struct _childNode *childList; //孩子链表的头结点;int degree; //节点的度;}TreeNode;typedef struct _tree{struct _treeNode *head; //树链表的头结点;(我理解为指向整个树头结点的指针/指向树链表头结点的指针)int len; //树节点个数;}Tree;//定义函数指针类型typedef void (*TreePrint)(TreeNode* node);//创建树;Tree *Create_Tree();//插入节点//pos 代表要插入节点父亲节点的位置//约定://1、新插入的节点插入在当前父亲节点所有孩子的右边;//2、根节点的位置是0;int Insert_Tree(Tree* tree,TreeData data,int pos);int Tree_Height(Tree* tree);int Tree_Degree(Tree* tree);-------------------------------------------------------int r_height(TreeNode* node){if(node == NULL){return 0;}int subHeight = 0;int max = 0;ChildNode* child = node->childList->next;while(child){subHeight = r_height(child->childNode);//等于遍历 ,子链表的子链表;一直到最底层;if(subHeight > max){max = subHeight;}child = child->next;}return max + 1;} int Tree_Height(Tree* tree) { if(tree == NULL) { errno = ERROR; return FALSE; } int height = r_height(tree->head->next); return height; }//度int r_degree(TreeNode* node){if(node == NULL)return 0;int max = node->degree; //这个重要!!!结构体里面有包含每个节点度;int subDegree = 0;ChildNode* child = node->childList->next;while(child){subDegree =r_degree(child->childNode);if(subDegree > max)max = subDegree;child = child->next;}return max;}int Tree_Degree(Tree* tree){if(tree == NULL){errno = ERROR;return FALSE;}int degree = r_degree(tree->head->next);return degree;}--------------------------------------------------------int main(){Tree *tree = Create_Tree();if(tree == NULL){myError("Create_Tree");return -1;}//插入Insert_Tree(tree, 'A', 0);Insert_Tree(tree, 'B', 0);Insert_Tree(tree, 'C', 0);Insert_Tree(tree, 'D', 0);Insert_Tree(tree, 'E', 1);Insert_Tree(tree, 'F', 1);Insert_Tree(tree, 'H', 3);Insert_Tree(tree, 'I', 3);Insert_Tree(tree, 'J', 3);Insert_Tree(tree, 'X', 3);Insert_Tree(tree, 'Z', 8);Display(tree,PrintA);//printf("删除B :\n");TreeData x;//Delete(tree,1,&x);//删除树链表中第二个节点//Display(tree,PrintA);printf ("height = %d\n", Tree_Height(tree));printf ("degree = %d\n", Tree_Degree(tree));return 0;}
阅读全文
0 0
- 用递归的方法求树的高度、度
- 求二叉树的高度(非递归)
- 递归求二叉树的高度
- 非递归求树的高度
- 递归求二叉树的高度
- 求树高度的非递归算法
- 如何求二叉树的高度(递归实现)
- 层次遍历求二叉树的高度(非递归)
- 求树的高度
- 求树的高度
- 求树的高度
- 求树的高度
- 求树的高度
- 用递归的方法求一个二叉树的深度。
- 用递归方法求集合的子集
- 用递归方法求n的阶乘。
- 用递归的方法求n!.cpp
- 用递归方法求数组的最大值
- 国际化问题
- JavaScript 获取鼠标点击位置坐标
- node mongodbClient
- J
- VS Code 快捷键大全
- 用递归的方法求树的高度、度
- jdk安装 & tomcat
- jsp,el表达式,jstl标准标签库
- Excel导入导出封装工具类
- leetcode-300 Longest Increasing Subsequence
- Java环境变量配置&解决版本不一致问题详解
- ES5中新增的Array方法详细说明
- 杭电暑期多校集训—RXD's date
- jQuery之父:每天都写点代码