设树采用孩子兄弟表示法存放,用类C语言设计算法计算树的高度。

不要复制,谢谢。

采用递归求解,先求左子树的高度和右子树的高度,然后整棵树的高度就是两颗子树高度的最大值+1。假定叶子节点高度为0。代码如下:

struct node {
    int val;
    struct node* left;
    struct node* right;
};

int height(struct node* root)
{
    int h, lh, rh;
    if ( root == NULL)
        return -1;//这里返回-1表示叶子节点的高度为0,若规定叶子节点的高度为1,这里返回0即可
    lh = height(root->left);
    rh = height(root->right);
    if (lh > rh) 
        h = lh + 1;
    else 
        h = rh + 1;
    return h;
}

追问

能写个程序吗?

追答

代码我上面不是已经写了吗,你可以把这个函数添加到自己的程序里面去啊

温馨提示:内容为网友见解,仅供参考
第1个回答  2013-09-18
计算树的高度是一个很简单的递归算法。下面这个算法充分简洁的表达了计算的全部过程。
int height(Node node){
//计算自身高度
int myheight;
if(!node.hasChild()){
myheight=1;
}else{
//注意按孩子兄弟表示法的树节点一般只有一个孩子
Node child=node.getChild();
myheight=height(child)+1;
}

//计算兄弟最大高度
int brotherheight=0;
List<Node> brothers=node.getBrothers();
if(brothers!=null&&brothers.size()>0){
//此处自行加一个循环计算兄弟的最大高度
brothers=maxHeight(brothers);
}
return myheight>brotherheight?myheight:brotherheight;
}
第2个回答  2013-09-18
你的问题看数据结构可以自己解决的。

设树采用孩子兄弟表示法存放,用类C语言设计算法计算树的高度。
采用递归求解,先求左子树的高度和右子树的高度,然后整棵树的高度就是两颗子树高度的最大值+1。假定叶子节点高度为0。代码如下:struct node { int val; struct node* left; struct node* right;};int height(struct node* root){ int h, lh, rh; if ( root == NULL) ...

用c语言求树的高度(数据结构)
= NULL){ int tmp = deep(tree, p->data - 1); if(tmp > depth) depth = tmp; p=p->next; } return depth + 1;}int main()

一棵采用孩子兄弟表示法存储的树,设计算法,按层次依次输出该树的所有...
1.输出根 2.将根进队列保存,将指针移到该根的右孩子。3.指针不为空则重复1,2一直到指针为空 4.如果队列不为空,则出队列头,指针移到队列头的左孩子,重复1-4直到队列为空

数据结构,二叉树遍历,孩子兄弟表示法,算法设计题
对于一般的家谱树(一般的多叉树)来说,我们可以很清楚的看出层次关系,树的层数表示代数(一共多少代人),树的最后一层表示最后一代人,由于多叉链表法表示的不方便,因此被迫无奈采用孩子兄弟表示法(二叉链表法).假设我的家谱是这样的:转换成孩子兄弟表示法后是这样的:我们要做的是:这时我们要找...

假设二叉树采用链接方法存储,编写一个计算一棵二又树t的高度的函数...
【答案】:(1)数据结构 采用二叉树的链接表示。(2)思路 对一棵二叉树t,考察它左右子树的高度,取其中大的一个,再加1即为t的高度。(3)算法 int depth(BinTree t){ PBinTreeNode pbtree;int dl,dr;pbtree=t;if(pbtree==NULL)return-1;dl=depth(pbtree->llink);dr=depth(pbtree->r...

【数据结构】树的定义和树的三种存储结构
树(Tree)是n(n>=0)个结点的有限集。n=0时称为空树。在任意一颗非空树中:假设以一组连续空间存储数的结点,同时在每个结点中, 附设一个指示器指示其双亲结点到链表中的位置 。把每个结点的孩子结点排列起来,以 单链表作为存储结构 ,则n个结点有n个孩子链表,如果是叶子结点则此单链表为...

圣诞树代码c语言
这个程序首先要求用户输入圣诞树的高度,然后使用两个嵌套的for循环来打印出圣诞树的每一行。第一个循环控制行数,第二个循环打印空格和星号。最后,打印出树干。C语言特点 1、简洁的语言 C语言包含的各种控制语句仅有9种,关键字也只有32个,程序的编写要求不严格且以小写字母为主,对许多不必要的部分...

设二叉树采用二叉链表结构存储,试设计算法求出二叉树深度。
int TreeDepth(NODE *bt)\/* 求树的深度 *\/ { int dep1,dep2;if(bt==NULL) return 0;else { dep1=TreeDepth(bt->lchild);dep2=TreeDepth(bt->rchild);if(dep1>dep2) return count=dep1+1;else return count=dep2+1;} }

4. 设二叉树的存储结构为二叉链表,试写出算法(C函数):将所有结点的左右...
如和图 6.4(c)的二叉树相应的存储结构图 6.6(b)所示,图中以 “0”表示不存在此结点 .二、 链式存储结构 由二叉树的定义得知二叉树的结点由一个数据元素和分别指向左右子树的两个分支构成 ,则表 示二叉树的链表中的结点至少包含三个域 :数据域和左右指针域 ,如图 (b)所示。有时 ,为了便于...

设二叉树的存储结构为二叉链表,编写有关二叉树的递归算法:
(1)统计二叉树中度为1的结点个数。(2)统计二叉树中度为2的结点个数。(3)统计二叉树中度为0(叶结点)的结点个数。(4)统计二叉树的高度。(5)统计二叉树的宽度,即在二叉树的各层上,具有结点数最多的那一层上的结点总数。(6)从二叉树中删... 展开 972630969...

相似回答