LeetCode:Minimum Depth of Binary Tree&& Maximum Depth of Binary Tree
2015-07-31 16:01
531 查看
1、Minimum Depth of Binary Tree
问题描述:
给定一棵二叉树,找到其最小深度。所谓的最小深度,即从根节点到最近的叶结点的最短路径上的结点数。
注意:必须到达叶结点(即左右子树为NULL)的路径,去统计结点数才有意义。因为自己就因为这点没考虑到才出错。
函数声明:
int Min(int x, int y); int Search_minDepth(struct TreeNode* root, int sum, int flag);//参数sum统计最小深度;flag为控制位 int minDepth(struct TreeNode* root);//主函数
算法概要:
step1: 判断当前结点是否为空,满足则return 0。否则,执行子函数Search_minDepth,返回最小深度。
step2: 判断当前结点是否为空,若满足继续判断控制位flag。若flag=1,则return sum(返回最小深度)。不满足,则返回无穷大。
step3:若当前结点不为空,深度sum++。
step4:判断当前结点是否为叶节点,若满足则将flag置1。
step5:递归调用自身,计算当前结点的左子树和右子树的最小深度,然后取两者最小值返回。
下面,对本代码为什么加控制位或者说添加步骤4,举例加以说明,否则返回的最小深度出错!
如上图所示二叉树,若不加控制位,则输出深度为1。因为,它把根节点4当做叶节点。那么当root指向节点4,它的左子树返回深度2,右子树返回深度1,于是错误认为深度为1。
实现源码:
<span style="font-size:18px;">#define Large 999999999 /** * Definition for a binary tree node. * struct TreeNode { * int val; * struct TreeNode *left; * struct TreeNode *right; * }; */ int Min(int x, int y) { return x<=y ? x:y; } int Search_minDepth(struct TreeNode* root, int sum, int flag) { if(root==NULL) { if(flag) { return sum; } else { return Large; } } if(root!=NULL) { sum=sum+1; } if(root->left==NULL && root->right==NULL) { flag=1; } return Min( Search_minDepth(root->left,sum,flag), Search_minDepth(root->right,sum,flag) ); } int minDepth(struct TreeNode* root) { if(root==NULL) { return 0; } return Search_minDepth(root,0,0); }</span>
2、Maximum Depth of Binary Tree
因为二叉树的最大深度问题与最小深度类似,这边归为一类问题,下面就不展开论述,只给出实现源码。
/** * Definition for a binary tree node. * struct TreeNode { * int val; * struct TreeNode *left; * struct TreeNode *right; * }; */ int Max(int x, int y) { return x>=y ? x:y; } int Search_maxDepth(struct TreeNode* root, int sum, int flag) { if(root==NULL) { if(flag) { return sum; } else { return 0; } } if(root!=NULL) { sum=sum+1; } if(root->left==NULL && root->right==NULL) { flag=1; } return Max( Search_maxDepth(root->left,sum,flag), Search_maxDepth(root->right,sum,flag) ); } int maxDepth(struct TreeNode* root) { if(root==NULL) { return 0; } return Search_maxDepth(root,0,0); }<strong> </strong>
相关文章推荐
- qtcreator 交叉编译 配置
- 跟我上“云”端(三)eclipselink+jboss实现多租户基本配置
- C语言实现Luhn 校验
- 串口通信校验方式(even,odd,space,mark)
- Android,java开发性能优化大总结
- HDU 5334 Virtual Participation(2015多校第四场)
- 高三dom笔记
- 短信通信的几种情况和CMS错误
- 串口通信校验方式(even,odd,space,mark) 分类: 开发工具 2015-07-31 16:01 5人阅读 评论(0) 收藏
- [Object-c]cocoaPods 安装及遇到问题处理方法
- 关于网页与firefox不兼容的问题
- 一张表更新另一张表 单行返回多行
- iOS开发之:iOS单个ViewController支持横屏,其他全竖屏方法
- 兴趣和专业
- Java编程思想重点笔记(Java开发必看)
- android actionbar的简单使用
- AJAX向服务器发送请求并返回json数据
- jQuery选择器和事件
- iOS开发趋势:Native与H5+JS 解决方案
- LCD驱动