leetcode111(二叉树的最小深度)--C语言实现

此生再无相见时 提交于 2020-08-14 02:29:39

求:

给定一个二叉树,找出其最小深度。

最小深度是从根节点到最近叶子节点的最短路径上的节点数量。

说明: 叶子节点是指没有子节点的节点。

示例:

给定二叉树 [3,9,20,null,null,15,7],

    3
   / \
  9  20
    /  \
   15   7
返回它的最小深度  2.

 

解:

思路:与求二叉树的最大深度类似问题,最直接的方法都是递归求解,但是实现略有区别。

1、对每个节点而言,深度为左右子树深度的较小者+1(求最大深度是左右子树深度的较大者+1)

2、空节点应该返回INT_MAX(求最大深度时返回的是0),如果此处返回0,当一个节点某个子树为空,另一个子树非空时,计算得到的深度为1,显然不符合题目要求。(应该是2)

3、根节点要做特殊处理,如果根节点为空,返回INT_MAX显然不合理,此处直接返回0。

/**
 * Definition for a binary tree node.
 * public class TreeNode {
 * int val;
 * TreeNode left;
 * TreeNode right;
 * TreeNode(int x) { val = x; }
 * }
 */
 
int   min(  int   x,  int   y){
     return   x<y?x:y;
}
 
int  GetDepth( struct  TreeNode* root){
     if  (root==NULL)   return  INT_MAX;
     if  (root->left == NULL && root->right == NULL)  return   1 ;
     return  min(GetDepth(root->left), GetDepth(root->right)) +  1 ;
}
 
int  minDepth( struct  TreeNode* root){
     if  (root == NULL)  return   0 ;
     return  GetDepth(root);
}
标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!