一、 称号
并寻求最深的二元相似。给定的二进制树。求其最小深度。
最小深度是沿从根节点,到叶节点最短的路径。
二、 分析
当我看到这个题目时。我直接将最深二叉树的代码略微改了下,把max改成min。本以为应该没有问题,谁知道WA了两次,我静下来看了看。最终知道了,当遇到有结点为NULL时就得要结束了。所下面次再简单的题目也要静下来好好分析,不然会easy出错。
/** * Definition for binary tree * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode(int x) : val(x), left(NULL), right(NULL) {} * }; */ class Solution { public: int minDepth(TreeNode *root) { if(root==NULL) return 0; int mleft=minDepth(root->left); int mright=minDepth(root->right); if(mleft==0) return 1+mright; else if(mright==0) return 1+mleft; else return min(mleft,mright)+1; } }; 二、 * Definition for binary tree * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode(int x) : val(x), left(NULL), right(NULL) {} * }; */ class Solution { public: int minDepth(TreeNode *root) { // Start typing your C/C++ solution below // DO NOT write int main() function return minRec(root); } int minRec( TreeNode * root) { if(!root) return 0; int left = minRec( root->left); int right = minRec( root->right); if(left && right) return 1 + min(left, right); if(left || right) return 1+left+right; return 1; } }; 三、 /** * Definition for binary tree * public class TreeNode { * int val; * TreeNode left; * TreeNode right; * TreeNode(int x) { val = x; } * } */ public class Solution { public int minDepth(TreeNode root) { // Start typing your Java solution below // DO NOT write main() function return minRec(root); } private int minRec(TreeNode root) { if(root==null) return 0; int l = minRec(root.left); int r = minRec(root.right); if(l==0) return r+1; if(r==0) return l+1; return Math.min(l, r) + 1; } }
版权声明:本文博主原创文章,博客,未经同意不得转载。