155 二叉树的最小深度
Posted tang-tangt
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了155 二叉树的最小深度相关的知识,希望对你有一定的参考价值。
原题网址:https://www.lintcode.com/problem/minimum-depth-of-binary-tree/description
描述
给定一个二叉树,找出其最小深度。
二叉树的最小深度为根节点到最近叶子节点的距离。
您在真实的面试中是否遇到过这个题?
样例
给出一棵如下的二叉树:
1
/
2 3
/
4 5
这个二叉树的最小深度为 2
标签
二叉树
Depth-first Search(DFS)
思路:可参照二叉树的最大深度一题。 PS:深度优先搜索上递归。二叉树与递归的题真的很容易懵比,要多练练。
最小深度与最大深度的区别是,返回左右子树深度时,二叉树的深度必须是根结点到叶子结点的距离,所以不能单纯的比较左右子树的递归结果返回较小值,因为对于只有单个孩子的节点,为空的孩子会返回0,但这个节点并非叶子节点,故返回的结果是错误的。
因此,当发现当前处理的节点有单个孩子是空时,返回一个极大值INT_MAX,防止其干扰结果。转自此文
因此,当发现当前处理的节点有单个孩子是空时,返回一个极大值INT_MAX,防止其干扰结果。转自此文
AC代码:
/** * Definition of TreeNode: * class TreeNode { * public: * int val; * TreeNode *left, *right; * TreeNode(int val) { * this->val = val; * this->left = this->right = NULL; * } * } */ class Solution { public: /** * @param root: The root of binary tree * @return: An integer */ int minDepth(TreeNode * root) { // write your code here if (root==NULL) { return 0; } if (root->left==NULL&&root->right==NULL) { return 1; } int leftDepth=minDepth(root->left); int rightDepth=minDepth(root->right); leftDepth = (leftDepth==0?INT_MAX:leftDepth); rightDepth = (rightDepth==0?INT_MAX:rightDepth); return leftDepth<rightDepth?leftDepth+1:rightDepth+1; } };
最开始还想用广度优先搜索一层层找下去,但深度值没办法计算,吐血
以上是关于155 二叉树的最小深度的主要内容,如果未能解决你的问题,请参考以下文章
代码随想录算法训练营第16天 | ● 104.二叉树的最大深度 559.n叉树的最大深度 ● 111.二叉树的最小深度 ● 222.完全二叉树的节点个数