求二叉树高度的原理、算法是什么,越详细越好,C语言,谢谢

如题所述

首先分析二叉树的深度(高度)和它的左、右子树深度之间的关系。从二叉树深度的定义可知,二叉树的深度应为其左、右子树深度的最大值加1。由此,需先分别求得左、右子树的深度,算法中“访问结点”的操作为:求得左、右子树深度的最大值,然后加 1 。
int Depth (BiTree T ){ // 返回二叉树的深度
if ( !T ) depthval = 0;
else {
depthLeft = Depth( T->lchild );
depthRight= Depth( T->rchild );
depthval = 1 + (depthLeft > depthRight ?
depthLeft : depthRight);
}
return depthval;
}
温馨提示:内容为网友见解,仅供参考
第1个回答  2010-09-23
二叉树高度的计算是通过遍历来实现的,主要的遍历方法有三种:前序遍历、中序遍历、后序遍历,这几种方法又有共同的实现方法:一般采用递归来实现。递归算法在C语言中是个很重要的知识点。

希望回答对你有帮助。

求二叉树高度的原理、算法是什么,越详细越好,C语言,谢谢
首先分析二叉树的深度(高度)和它的左、右子树深度之间的关系。从二叉树深度的定义可知,二叉树的深度应为其左、右子树深度的最大值加1。由此,需先分别求得左、右子树的深度,算法中“访问结点”的操作为:求得左、右子树深度的最大值,然后加 1 。int Depth (BiTree T ){ \/\/ 返回二叉树的...

求二叉树的高度
公式:V0=(V2)+2(V3)+3 (V4)...(k-1)(Vk)+1 所有的树都满足这个公式,其中v0...vk代表 度为0...K的节点个数。所有计算度与节点个数的问题无论是几叉树的都必须用这个式子,我建议楼主哥哥记住!叶子节点就是度为0的节点V0,其他的分支节点度都为m那么就只存在度为0和度为m的节点 ...

以二叉链表作存储结构,试编写求二叉树高度的算法
主方法调用RootFirst(&root,0);即可,g_nMax 即为最终的树的高度。int g_nMax = 0;voild RootFirst(TreeNode *p,int nLevel){ if (null == p->left && null == p->right) \/\/当前为叶子节点 { if (g_nMax < nLevel) { g_nMax = nLevel; return; } } if(null != p->left ) { Roo...

求二叉树高度
公式:V0=(V2) +2( V3)+3 (V4)...(k-1)(Vk)+1 所有的树都满足这个公式,其中v0...vk代表 度为0...K的节点个数。所有计算度与节点个数的问题无论是几叉树的都必须用这个式子,我建议楼主哥哥记住!叶子节点就是度为0的节点V0,其他的分支节点度都为m那么就只存在度为0和度...

求高手解释下二叉树递归求深度问题
这个算法的意思是,当前树的深度等于其左子树和右子树中较深的那一个的深度再加1 例如:您提供的图A的左子树深度为3,右子树的深度为3,此时A这棵树的深度就为4 再来考虑D和G,此时D的左子树深度为0,右子树深度为0,所以返回0+1 = 1 同理G也返回1 因此C和F返回2,而B和E返回3,最终A...

二叉树的性质有些啊?怎么求它的深度?
1 :在二叉树的第i层上至少有2^(i-1)个结点 2:深度为k的二叉树至多有2^(k-1)个结点 3:对任何一棵二叉树T,如果其终端结点数为n0,度为2的结点数为n2,则n0=n2+1 4:具有n个结点的完全二叉树的深度是【log2n】+1(向下取整)5:如果对一棵有n个结点的完全二叉树的结点按层序编号...

C语言二叉树的深度指什么?怎么求?
3.比较左右子树深度值,返回较大的那一个 4.通过递归调用 include<iostream>#include<stdlib.h>using namespace std;struct BinaryTreeNode{ int m_nValue; BinaryTreeNode* m_pLeft; BinaryTreeNode* m_pRight;};\/\/创建二叉树结点BinaryTreeNode* CreateBinaryTreeNode(int value){ B...

c语言二叉树问题,勿写代码,求详细思考过程
中序遍历:若树不空,则先访问左子树,再访问根,再访问右子树。从后序遍历:CDABE得出E是最顶根节点。然后中序遍历:CADEB得出CAD是E的左子树中的,B是E的右子树中的。再分析后序遍历CDA可以知道A是CD的根,而中序是CAD得到C是A的左子树,D是A的右子树。(如下图)最后,先序遍历:若树...

数据结构与算法分析 —— C 语言描述:二叉树
表达式树的树叶是操作树(operand),比如常数或者变量,而其他的节点为操作符(operator)。由于这里所有的操作都是二元的,因此这棵特定的树正好是二叉树,虽然这是最简单的情况,但是节点含有的儿子还是有可能多于两个的。一个节点也有可能只有一个儿子,如果有一目减算符(unary minus operator)的情形...

二叉树的深度算法怎么算啊
二叉树的深度算法:一、递归实现基本思想:为了求得树的深度,可以先求左右子树的深度,取二者较大者加1即是树的深度,递归返回的条件是若节点为空,返回0 算法:1 int FindTreeDeep(BinTree BT){ 2 int deep=0;3 if(BT){ 4 int lchilddeep=FindTreeDeep(BT->lchild);5 int rchilddeep=Find...

相似回答