求解二叉树的深度(高度)_C语言
来源:互联网 发布:天庭淘宝店无常 编辑:程序博客网 时间:2024/05/17 03:32
http://blog.csdn.net/u010275850/article/details/45955741
这是在阿里面试的一道题,刚开始感觉不是很难。于是按查找最大值和最小值的方法计算二叉树的深度。结果发现这俩个根本不是一回事。即使你不断遍历左子树,找到了最小
值,但是其最小值节点依然可能会有右子树,这样深度也就会不断增加。也就是说最大值对应的节点并不等同于右子树的深度,最小值对应的节点并不等同于左子树的深度。
面试结果也就可想而知了。
其实拿到这道题,首先想到的应该是采用递归算法。递归算法就得明确两点:
1、基准情形:空树返回-1;
2、递归形式:若不是空树,比较它的左子树深度和右子树深度,返回较大深度值加1,即:return (rightdep>leftdep) ? rightdep+1 : leftdep+1;
编程示例如下:
- #include<stdio.h>
- #include<stdlib.h>
- #define N 10
- typedef struct BinTreeNode
- {
- int data;
- struct BinTreeNode *left;
- struct BinTreeNode *right;
- }BinTreeNode,*BinTree;
- BinTree insert(BinTree T,int data);//二叉树节点的添加
- int TreeDepth(BinTree T);//返回树的深度(高度)
- int main()
- {
- int i=0;
- int data[N]= {20, 15 ,10, 12, 18, 25, 30,16,17,18};
- BinTreeNode *root=NULL;
- int Depth=0;
- for(i=0;i<N;i++)
- {
- root=insert(root,data[i]);
- }
- Depth=TreeDepth(root);
- printf("\nTree Depth is %d.\n",Depth);
- free(root);
- return 0;
- }
- //注意理解递归
- int TreeDepth(BinTree T)
- {
- int rightdep=0;
- int leftdep=0;
- if(T==NULL)
- return -1;
- if(T->left!=NULL)
- leftdep=TreeDepth(T->left);
- else
- leftdep=-1;
- if(T->right!=NULL)
- rightdep=TreeDepth(T->right);
- else
- rightdep=-1;
- return (rightdep>leftdep) ? rightdep+1 : leftdep+1;
- }
- BinTree insert(BinTree T,int data)
- {
- if(T==NULL)
- {
- T=malloc(sizeof(BinTreeNode));
- if(T==NULL)
- printf("Out of space!\n");
- else
- {
- T->data=data;
- T->left=NULL;
- T->right=NULL;
- }
- }
- else
- {
- if(data<T->data)
- T->left=insert(T->left,data);
- else
- T->right=insert(T->right,data);
- }
- return T;
- }
0 0
- 求解二叉树的深度(高度)_C语言
- 求解二叉树的深度(高度)_C语言
- 数据结构_求二叉树的高度以及层次遍历二叉树算法_C语言源代码
- 求解二叉树的深度
- 求解二叉树高度的递归算法
- 递归求解二叉树的深度
- 求解二叉树所有节点的深度
- 数据结构之二叉树深度的求解
- [二叉树专题]:递归求解二叉树的高度
- 【二叉树】求树的高度(深度)
- 求二叉树的高度(深度+1)
- 二叉树深度与高度的区别
- C语言实现二叉树的各种遍历及求解深度
- C语言实现二叉树的各种遍历及求解深度
- 数据结构_求二叉树的宽度_C语言源代码
- 后序遍历求解二叉树的高度
- 二叉树_C语言实现(上)
- 二叉树_C语言实现(下)
- poj3261 Milk Patterns(后缀数组)
- SQL 查询地理信息中指定距离范围内的记录
- Ural1297 Palindrome(后缀数组)
- android学习四(Activity的生命周期)
- poj2406 Power Strings(kmp失配函数)
- 求解二叉树的深度(高度)_C语言
- poj2774 Long Long Message(后缀数组)
- [总结]后缀数组: 注释+模板
- 1020. 月饼
- poj3294 Life Forms(后缀数组)
- poj3415 Common Substrings(后缀数组,单调栈)
- Android 自定义控件:水波纹效果
- UVaLive5031 Graph and Queries(时光倒流+名次树)
- sql对access数据的插入操作