二叉树求深度的递归的详细分析
来源:互联网 发布:mac u盘安装win7教程 编辑:程序博客网 时间:2024/06/03 07:18
二叉树求深度的递归的详细分析
二叉树求深度递归算法源码
》数据结构:
typedef struct BINODE
{
TELEMETYPE data;
struct BINODE *lchild,*rchild;
}BiNode,*BiTtree;
》递归函数
int GetTreeDeep(BiTtree T) //计算二叉树的深度
{
if(T==NULL)
return 0;
else{
int a = GetTreeDeep(T->lchild);
int b = GetTreeDeep(T->rchild);
return (a>b)?(a+1):(b+1);
}
}
如(a)图,假设给出创建了这个二叉树,使用如上给出的递归实现的经典算法,这个递归过程是怎样的呢?
递归过程中GetTreeDeep这个函数被自身多次调用,让我们给它们标号:
函数 返回值 做什么? 步骤
GetTreeDeep —-》进入函数 —-》访问A 0
int a = GetTreeDeep(T->lchild); 1 —-》访问B 1
int a = GetTreeDeep(T->lchild); 0 —-》访问B的左空节点 2
int b = GetTreeDeep(T->rchild); 0 —-》访问B的右空节点 3
此时标号2,3函数完成,得到a=0,由步骤2,3得到步骤1函数的a值为1,再由步骤1得到步骤0对应的返回值为2,此时计算到树的高度为2,这只是根节点左部的子树高度,此时运行到刚开始进入函数内的第二个GetTreeDeep,所以接下来该访问右部子树:
int b = GetTreeDeep(T->rchild); —— 》访问C 4
int a = GetTreeDeep(T->lchild); 2 ——》访问D 5
int a = GetTreeDeep(T->lchild); 1 ——》访问F 6
int a = GetTreeDeep(T->lchild); 0 ——》访问F的左空节点 7
int b = GetTreeDeep(T->rchild); 0 ——》访问F的右空节点 8
步骤7,8的返回值为0,由此得到步骤6的返回值为1,步骤4对应的返回值为2,接下来,运行到该访问C的右节点:
int b = GetTreeDeep(T->rchild); ——》访问E 9
int a = GetTreeDeep(T->lchild); 1 ——》访问G 10
int a = GetTreeDeep(T->lchild); 0 ——》访问G的左空节点 11
int b = GetTreeDeep(T->rchild); 0 ——》访问G的右空节点 12
以此类推:可知步骤8的返回值为1,现在该访问E的右节点:
int b = GetTreeDeep(T->rchild); 1 ——》访问H 13
int a = GetTreeDeep(T->lchild); 0 ——》访问H的左空节点 14
int b = GetTreeDeep(T->rchild); 0 ——》访问H的右空节点 15
现在开始返回,比较各个节点的返回值孰大孰小
1, 首先比较的是步骤13和步骤10的返回值,二者一样大,返回1+1,步骤9得返回值2
2, 比较步骤9和5,二者同样为2,故步骤4的返回值为2+1,为3
3, 比较步骤4和步骤1,前者为3,后者为1,取前者,所以最后返回3+1,得步骤0的返回值为4,,即为最终结果。
- 二叉树求深度的递归的详细分析
- 二叉树求深度的递归的详细分析
- 递归求二叉树的深度
- 非递归求二叉树的深度
- 求二叉树的深度,递归与非递归算法
- 求二叉树的深度递归与非递归版
- 二叉树的遍历,递归和非递归,求深度
- 求二叉树深度的递归和非递归算法
- 求二叉树的深度 递归 非递归
- 用递归的方法求一个二叉树的深度。
- 二叉树的非递归遍历&求深度
- 求二叉树深度的非递归算法
- 判断完全二叉树以及求二叉树深度的递归与非递归算法实现
- 求二叉树的深度
- 求二叉树的深度
- 求二叉树的深度
- 求二叉树的深度
- 求二叉树的深度
- hdu 2546-饭卡
- Linux笔记(2)-目录树结构
- git http/https方式储存密码
- 软中断域硬中断
- String类不可变性的好处
- 二叉树求深度的递归的详细分析
- Qt中QObject QApplication Qwidget QDialog等等都是什么关系??
- date(w) 输出后对应的周几不对的问题
- 58 同城 iOS 客户端 Hybrid 框架探索
- jquery-qrcode生成带logo的二维码
- 部署Maven Web遇到的问题记录
- 使用SecureCRT登录时候报错
- SpringMVC-Mybatis-Memcached整合案例
- Android中"get","post" 最新请求方式