精华内容
下载资源
问答
  • 我自己编写的程序,又找不到错的地方,运行一下的时候就是只能输入n和h的值,然后程序就崩了,计算不出要计算高度和节点的数目,错在哪里了啊。。。麻烦各位了,先谢过哈 #include <stdio.h> typedef...
  • 二叉树 - 递归计算二叉树的高度C语言

    万次阅读 多人点赞 2018-04-03 21:54:31
    2.完整代码如下:/* 递归函数 - 计算二叉树高度(只有一个根节点的二叉树高为1) */ #include &lt;iostream&gt; #include &lt;malloc.h&gt; using namespace std; //二叉树节点定义 typedef int ...

    1.规定:只有一个根节点的二叉树高为1。

    2.完整代码如下:

    /* 递归函数 - 计算二叉树高度(只有一个根节点的二叉树高为1) */
    
    #include <iostream>
    #include <malloc.h>
    using namespace std;
    
    //二叉树节点定义
    typedef int ElementType;
    typedef struct bitnode
    {
    	ElementType data;                  //数据域 
    	struct bitnode *left, *right;      //指针域 
    } bitnode, *bitree;                    //bitnode为结构体,bitree为指向结构体bitnode的指针 
    
    
    //先序创建一棵二叉树
    bitree CreateTree()           
    {
    	bitree T;
    	ElementType item;
    	
    	cin >> item;
    	if( item == 0 )                  //0为空树标记 
    	{
    		T = NULL;                    //T为空树 
    	}
    	else
    	{
    		T = (bitree)malloc(sizeof(bitnode));
    		T->data = item;
    		
    		T->left = CreateTree();              //递归创建左子树 
    		T->right = CreateTree();             //递归创建右子树 
    	} 
    	
    	return T;                              //返回根节点 
    } 
    
    
    //先序周游一棵树
    void PerOrder(bitree T)
    {
    	if( T )                      //T != NULL
    	{
    		cout << T->data << " ";             //先访问根节点 
    		PerOrder(T->left);                  //再访问其左子树 
    		PerOrder(T->right);                 //最后访问其右子树 
    	}
    } 
    
    //释放树的空间 
    bitree FreeTree(bitree T)
    {
    	if( T )
    	{
    		FreeTree(T->left);                  //递归释放其左子树 
    		FreeTree(T->right);                 //递归释放其右子树 
    		
    		free(T);                            //释放掉根节点 
    		T = NULL;                           //释放掉指向根节点的指针,避免野指针 
    	}
    	
    	return T;
    }
    
    //计算一棵树的高度
    int TreeHeight(bitree T)
    {
    	if( T == NULL )           //空树,返回0 
    	    return 0;
    	if( T->left == NULL && T->right == NULL )          //树根返回1 
    	    return 1;
    	return max(TreeHeight(T->left), TreeHeight(T->right)) + 1; //树的高度 = MAX(左子树的高度,右子树的高度) + 1;
    } 
    
    
    //main()函数中为测试代码,读者可自行设计 
    int main()
    {
    	bitree root;
    	int height = 0;
    	
    	cout << "先序创建一棵二叉树,一次性输入一组数据(以空格隔开):";
    	root = CreateTree();
    	
    	cout << "先序周游:";
    	PerOrder(root);
    	cout << endl;
    	
    	height = TreeHeight(root);
    	cout << "树的高度为:" << height << endl;
    	
    	root = FreeTree(root);
    	if(root == NULL)
    	    cout << "释放成功" << endl;
    	    
    	return 0;
    }

    3.运行结果:

    4.要点:上述输入的数据所代表的的树形图为:

    展开全文
  • 学习数学的过程中,单位换算贯穿始终。无论是在小升初数学考试...世纪:计算年代的单位,一百年为一个世纪。 大月:指阳历(公历)有三十一天的月份,公历每年一﹑三﹑五﹑七﹑八﹑十﹑十二这七个月为大月,均三十一天。

    学习数学的过程中,单位换算贯穿始终。无论是在小升初数学考试中,还是在生活方面,都会涉及单位换算的问题。

    在小学阶段,主要涉猎的单位换算包括长度、面积、体积、重量、人民币以及时间方面的换算。

    由于换算值的不统一,导致很多孩子容易把这些换算值混淆,导致考试出错丢分,有时还会在生活中闹笑话。

    对此,下面将分享小学阶段数学单位换算的所有公式,非常齐全,希望能帮助各位孩子记忆,以免出现运用上的差错。

    长度单位换算

    长度单位中最常见的有千米(km)、米(m)、分米(dm)、厘米(cm)、毫米(mm),他们之间的换算关系为:

    1千米(km)=1000米(m),1米(m)=10分米(dm)。

    1千米(km)=1000米(m)=10000分米(dm)=1000 00厘米(cm)=1000 000毫米(mm)

    1米(m)=10分米(dm)=100厘米(cm)=1000毫米(mm)

    1分米(dm)=10厘米(cm)=100毫米(mm)

    1厘米(cm)=10毫米(mm)

    时间单位换算

    1世纪=100年 1年=12个月

    世纪:计算年代的单位,一百年为一个世纪。

    大月:指阳历(公历)有三十一天的月份,公历每年一﹑三﹑五﹑七﹑八﹑十﹑十二这七个月为大月,均三十一天。

    展开全文
  • 利用递归求下图的叶子结点数量以及的深度 #define _CRT_SECURE_NO_WARNINGS #include<stdio.h> #include<stdlib.h> //二叉树结点 typedef struct BINARYNODE { char ch; struct BINARYNODE* ...

    利用递归求下图的叶子结点数量以及树的深度

    在这里插入图片描述

    #define _CRT_SECURE_NO_WARNINGS
    #include<stdio.h>
    #include<stdlib.h>
    
    
    //二叉树结点
    typedef struct BINARYNODE {
    	char ch;
    	struct BINARYNODE* lchild;
    	struct BINARYNODE* rchild;
    }BinaryNode;
    
    
    
    //递归求叶子数量
    void CalculateLeafNum(BinaryNode* root,int *LeafNum) {
    	if (root == NULL) {
    		return;
    	}
    	if (root->lchild == NULL && root->rchild == NULL) {
    		(*LeafNum)++;
    	}
    	//判断左子树
    	CalculateLeafNum(root->lchild,LeafNum);
    	//判断右子树
    	CalculateLeafNum(root->rchild,LeafNum);
    }
    
    
    //递归求树的高度
    int CalculateTreeDepth(BinaryNode* root) {
    	if (root == NULL) {
    		return 0;
    	}
    	//深度初始化为0
    	int depth = 0;
    	//分别求左右子树的深度
    	int LeftDepth = CalculateTreeDepth(root->lchild);
    	int RightDepth = CalculateTreeDepth(root->rchild);
    	//取二者中最大值,并加1(本层高度)
    	depth = LeftDepth > RightDepth ? LeftDepth + 1: RightDepth + 1;
    	return depth;
    }
    
    
    //创建二叉树
    void CreateBinaryTree() {
    	//创建结点
    	BinaryNode node1 = { 'A',NULL,NULL };
    	BinaryNode node2 = { 'B',NULL,NULL };
    	BinaryNode node3 = { 'C',NULL,NULL };
    	BinaryNode node4 = { 'D',NULL,NULL };
    	BinaryNode node5 = { 'E',NULL,NULL };
    	BinaryNode node6 = { 'F',NULL,NULL };
    	BinaryNode node7 = { 'G',NULL,NULL };
    	BinaryNode node8 = { 'H',NULL,NULL };
    	//建立结点关系
    	node1.lchild = &node2;
    	node1.rchild = &node6;
    	node2.rchild = &node3;
    	node3.lchild = &node4;
    	node3.rchild = &node5;
    	node6.rchild = &node7;
    	node7.lchild = &node8;
    	//叶子数目
    	int LeafNum = 0;
    	//调用函数求叶子结点数目
    	CalculateLeafNum(&node1,&LeafNum);
    	printf("LeafNum = %d\n", LeafNum);
    	//计算树的深度
    	int Depth = CalculateTreeDepth(&node1);
    	printf("TreeDepth = %d\n", Depth);
    }
    
    int main() {
    	CreateBinaryTree();
    	return 0;
    }
    

    运算结果

    LeafNum = 3
    TreeDepth = 4
    
    展开全文
  • #include <stdio.h> #include <stdlib.h> #include <malloc.h> //定义一个节点 struct node{ int data;...//将整棵打包起来,访问的话只需要访问根节点即可 struct tree{ struc...

    视频地址:二叉树代码实现01 二叉树代码实现02
    以下是博主的笔记总结, 如有错误请指教。

    #include <stdio.h>
    #include <stdlib.h>
    #include <malloc.h>
    //定义一个节点
    struct node{
    	int data;
    	struct node* left;
    	struct node* right;
    };
    //将整棵树打包起来,访问的话只需要访问根节点即可
    struct  tree{
    	struct node* root;//只需知道根节点,就可知道树的位置
    };
    
    //定义函数,实现往一棵树插入一个数值功能
    void insert(struct tree* tree, int value){
    	//新建一个节点
    	struct node* node = (struct node*)malloc(sizeof(struct node));
    	node -> data  = value;
    	node -> left  = NULL;
    	node -> right = NULL;
    	//如果根节点为空则直接填入数值,否则进行二叉搜索判断
    	if(tree ->root == NULL){
    	   tree -> root = node;
    	}
    	else{
    		struct node *temp =  tree ->root;//创建比较的中间变量,该变量指向根节点,与新建的节点的数值(value)进行大小比较
    		while(temp != NULL){
    			//如果value比节点小走左边,否则,走右边
    			if(value < temp ->data){
    				//左边为空,指向新建的节点,否则进入下一层比较
    				if(temp ->left == NULL){
    					temp ->left = node;
    					return;
    				}
    				else{
    					temp = temp ->left;//temp指向上一层父节点的下左子节点,进行循环比较
    				}
    			}
    			else{
    				//右边为空,指向新建的节点,否则进入下一层比较
    				if(temp ->right == NULL){
    					temp ->left = node;
    					return;
    				}
    				else{
    					temp = temp ->right;//temp指向上一层节点的下右节点,进行循环比较
    				}
    			}
    		}
    	}
    }
    //递归算某节点(记为a)的树高;同理可算最大 值
    int get_height(struct node* node){
    	//若该节点为空,高度为0
    	if(node == NULL){
    		return 0;
    	}
    	//否则递归调用,一层一层往下算
    	else{
    		//思想:分别计算a节点下一层左右子节点两边的树高,返回最大树高。
    
    		int left_h  = get_height(node ->left);
    		int right_h = get_height(node ->right);
    		int max = left_h;
    		if(right_h > max){
    			max = right_h;
    		}
    		return max + 1;	//最大值+1 == 子节点树高+自身a
    	}
    }
    
    int main()
    {
    	int arr[7] = {6, 3, 8, 2, 5, 1, 7};
    	struct tree tree;
    	tree.root = NULL;//建立一个空树
    
    	int i;
    	for(i = 0; i < 7; i++){
    		insert(&tree, arr[i]);
    	}
    	int h = get_height(tree.root);//求该数根节点的树高
    	//接下来遍历,中序遍历都是从小往大排序, 省略......; 
    	return 0;
    }
    
    展开全文
  • 二叉树 /* 二叉树的构造 */ /* 二叉树的遍历 */ /* 二叉树的基础操作 */ /* 二叉树的相关判断 */ // 判断二叉树是否是完全二叉树 // 判断二叉树是否是满二叉树 // 判断二叉树是不是二叉排序 // ...
  • 1 AVL 在二叉查找中,为了防止某节点处出现左、右儿子深度不平衡的情况,...AVL的平衡条件:每个节点的左子树和右子高度最多差1。 2 单旋、双旋 2.1 单旋 在插入一个节点后,只有那些从插入点到...
  • 文章目录一 前言二 平衡二叉排序阐述1. 二叉排序的不足2. 平衡二叉排序的性质3. 平衡二叉排序效率分析4. 左旋、右旋以及四种失衡类型 一 前言   在了解平衡二叉排序前,请大家务必掌握 BS二叉排序的...
  • Problem Description Long long ago, there was a gunner whose name is Jack. He likes to go hunting very much. One day he go to the grove. There are n birds and n trees. The i-th bird stands on the top ...
  • 数据结构——计算节点个数、二叉树高度一、计算各种节点(1)计算总节点:(2)计算单分支节点:(3)计算双分支节点:二、计算二叉树高度代码实现: 一、计算各种节点 二叉树结构体如下: // 二叉树结构体 ...
  • 目的:掌握二叉树的构造、遍历以及计算树高度等操作。 要求:编写程序任意输入二叉树的结点个数和结点值,构造一棵二叉树,采用三种递归遍历算法(前序、中序、后序)对这棵二叉树进行遍历并计算出二叉树的高度。 二...
  • * 构造一颗二叉查找,实现的插入、删除等基本操作 * */ #include&lt;stdio.h&gt; #include&lt;stdlib.h&gt; typedef struct node { int count; //记录某个元素出现的次数 int ...
  • 好文网为大家准备了关于C语言实验心得体会范文,好文网里面收集了五十多篇关于好C语言实验心得体会好文,希望可以帮助大家。更多关于C语言实验心得体会内容请关注好文网c语言作为一种计算机的语言,我们学习它,有助于...
  • Problem Description An AVL tree is a kind of balanced binary search tree. Named after their inventors, Adelson-Velskii and Landis, they were the first dynamically balanced trees to be proposed....
  • AVL树C语言实现

    千次阅读 2013-05-02 11:22:02
    AVL树其每个节点的左子树和右子树高度最多差1(空树的高度为-1),每个节点保留其高度信息。下图中,左边的图是AVL树,而右边的不是。 节点插入 当对一个AVL树插入节点后,只有那些从插入节点到根节点的路径上的节点...
  • 背景介绍:不要C语言很久了,现在单位有要求C,所以就只能从头开始...题目:如何测量一个高度 思路:利用相似三角形来处理,借助两个人(有明显的高度差)的高度做相似三角形的等比。 代码实现: #include
  • (1)二叉查找的定义 在计算机科学中,二叉树是每个节点最多有两个子树的结构。通常子树被称作“左子树”(left subtree)和“右子”(right subtree)。二叉树常被用于实现二叉查找和二叉堆。 二叉树的...
  • 递归法可以理解为一个子问题当一棵只有左孩子和右孩子的时候我们只需要计算其左孩子的高度和其右孩子的高度并且求的他门两个之间的最大值并且+1即可 这个1就是根节点这样我们就得到了递归代码如下 /** 计算二叉树...
  • 源代码 /************************** 计算二叉树高度,寻找最长路径 ***********************************/ #include typedef struct abc { struct abc *lchild,*rchild; int data; }Node; Node * init(); void scan...
  • 编译原理课程内容主要是原理性质,高度抽象[1] 。 中文名 编译原理[1]外文名 Compilers: Principles, Techniques, and Tools[1] 领 域 计算机专业的一门重要专业课[1] 编译原理基本概念 编辑 编译原理即是对高级...
  • C语言

    千次阅读 2013-11-18 20:30:53
     树型结构是以分支关系定义的层次结构,它是一种重要的非线性结构。  形结构在客观世界中广泛存在,例如人类的家庭族谱以及各种社会组织机构都可以用形结构来表示,又如在计算机文件管理和信息组织方面也...
  • 和二叉树 C语言实现

    万次阅读 多人点赞 2013-11-30 23:42:07
    的表示:通常使用广义表表示方法,即每棵的根作为由子树构成的表的名字而放在表的前面,如下图的对应的广义表表示为: A(B(D,E(H,I),F),C(G)) 结点的度:中每个结点具有的非空子数或者说后继...
  • C语言编写AVL

    2021-01-04 17:01:29
    高度为H的AVL包含结点数量的范围:1.5H - 2H-1 (low(H) = low(H-1) + low(H-2)+ 1 ≈ 1.5 类斐波那契数列) 综上:所以高和结点数量的关系 h = logn 二、平衡调整策略 发生在回溯阶段的,第一个失衡...
  • 数据结构实验 及其应用 C语言实现 的定义 (tree)是包含n(n>=0)个结点的有穷集,其中: (1)每个元素称为结点(node); (2)有一个特定的结点被称为根结点或树根(root)。 (3)除根结点之外的其余数据...
  • C语言

    2017-08-08 22:25:07

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 8,525
精华内容 3,410
关键字:

计算树的高度c语言

c语言 订阅