C语言二叉树求高度问题

int TreeDeep(tree T)
{
int deep=0;
if(T)
{ int leftdeep,rightdeep;
leftdeep=TreeDeep(T->lchild);
rightdeep=TreeDeep(T->rchild);
deep=leftdeep>=rightdeep?leftdeep+1:rightdeep+1;
} 看不懂这个代码,他是怎么工作的 ,可以详细解释下吗 谢谢
他是一直遍历左子树,遍历完左子树然后再遍历右子树,但是怎么计数呀,没看到类似于i++的计数器呀,是怎么工作的谢谢

deep=leftdeep>=rightdeep?leftdeep+1:rightdeep+1; 

放在

leftdeep=TreeDeep(T->lchild); 
rightdeep=TreeDeep(T->rchild); 

后面

就是一直访问左孩子到树的底部后再一层层返回去,返回一层深度加一,一旦遇到右孩子不为空时,再访问右孩子的左孩子到树的底部后再一层层返回去,返回一层深度加一,每一个结点都进行右孩子与左孩子深度的比较,取大返回

追问

返回一层深度加1怎么体现,就是不知道系统怎么会自动加1,如果有像i++这样的计数器我就能理解

追答

leftdeep+1:rightdeep+1这里就已经体现出来了

追问

加1的意思不是加上根那层吗,leftdeep他是怎么加的

我是这么理解程序的,先数出来所有leftdeep的深度,然后数出了所有rightdeep深度,最后比较哪个大,然后返回的时候加上1就是加上根的层数

追答

还有,你代码有问题,int deep;if(T==NULL) deep=0;最后还得加上return deep;

追问

我就是不懂,他遍历怎么就会顺便有计数器的功能

追答

这很难说明白,我看你是不明白c语言的运行,你会不会c语言调试?会的话你就按F10一步一步调试,了解它是怎么运行先

追问

对对其实我就是想了解他是怎么运行的

还是谢谢你了

追答

不用!

温馨提示:内容为网友见解,仅供参考
无其他回答

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

C语言 二分法查找的问题?请大家帮我解惑。
最坏的情况应该是log2n向下取整+1,这也是折半查找判定树(完全二叉树)的树高。第一,题目不严谨,这个折半查找可以向上或向下取整(大部分参考书上默认用向下取整来讲解),向下取整当然是花4次找到8,而向上取整是3次。第二,最后剩下一个数的时候,那个数还需不需要比较,从代码层面来看,不能简单...

C语言二叉树的深度指什么?怎么求?
1.如果根节点为空,则深度为0,返回0,递归的出口。2.如果根节点不为空,那么深度至少为1,然后我们求他们左右子树的深度,3.比较左右子树深度值,返回较大的那一个 4.通过递归调用 include<iostream>#include<stdlib.h>using namespace std;struct BinaryTreeNode{ int m_nValue; BinaryTree...

c语言,二叉树求解~
先考虑度为2的结点,第一层1个,第二层2个,第三层4个,第四层8个,第五层8个,共23个。然后第5层还有8个空位,先假设为叶子节点,即度为0。第五层满,目前总共31个结点。然后第五层的8个度为2的结点可以引申出16个叶子结点,总共47个,以满足题意,假设成立。故6层。当然比较简单的题画...

二叉树(C语言)
这个问题,可以看成完全二叉树,有性质有节点i的父节点为: i\/2.而题目要求的意思也就是找到两个节点的公共父节点。(含可能为其中一个节点)因此,思路如下:输入两个值 x,y 找到较大的那个,(循环的,因不断改变,所以需不断比较)做x=x\/2;(假设此时x较大,x为int 型)然后再比较,,...

二级C语言中"告诉了完全二叉树的总结点数,怎么求它的叶子结点数"?_百度...
完全二叉树有一个性质: 具有n个结点的完全二叉树的深度为log2n(2是下标)+1。根据这个性质,就可以求得完全二叉树的深度为10 10层满二叉树的总结点数为1023,最后一层的结点数应该是2的9次方为512,所以肯定699个结点肯定不是满二叉树。。。叶子节点出现在最后两层上。。。最后一层叶子结点个数为...

C语言问题
第一层1个 第二层2个 第三层4个 第四层8个 第五层16个 ...第n层 有2倍(n-1)层的个数 但是不知道这棵树是不是满二叉树,所以要计算第几层,有个公式(看图)将700带入,得到n层,然后计算n-1层有多少个节点,700减去得到的节点数,就是叶子节点了。。。

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

数据结构(C语言版),求高手解决。。
1.二叉树是度为2的有序树( )【答案】× 2.完全二叉树一定存在度为1的结点( )【答案】× 3.深度为K的二叉树中结点总数≤2k-1( )【答案】√ 4.由一棵二叉树的先序序列和后序序列可以惟一确定它( )【答案】× 5.完全二叉树中,若一个结点没有左孩子,则它必是树叶...

C语言 什么叫完全二叉树?
完全二叉树是一种特殊的二叉树。定义:如果一棵具有n个结点的深度为k的二叉树,它的每一个结点都与深度为k的满二叉树中编号为1~n的结点一一对应,这棵二叉树称为完全二叉树。例:特点:叶子结点只可能在最大的两层上出现,对任意结点,若其右分支下的子孙最大层次为L,则其左分支下的子孙的最大...

相似回答