/** * Definition for a binary tree node. * public class TreeNode { * public int val; * public TreeNode left; * public TreeNode right; * public TreeNode(int x) { val = x; } * } */ public class Solution { Stack<TreeNode> S = new Stack<TreeNode>(); List<List<TreeNode>> list = new List<List<TreeNode>>(); private void postNode(TreeNode node) { if (node != null) { S.Push(node); if (node.left != null) { postNode(node.left); } if (node.right != null) { postNode(node.right); } if (node.left == null && node.right == null) { list.Add(S.ToList()); } S.Pop(); } } public int MinDepth(TreeNode root) { postNode(root); var min = int.MaxValue; if (list.Count == 0) { min = 0; } foreach (var l in list) { var count = l.Count; if (count < min) { min = count; } } return min; } }
https://leetcode.com/problems/minimum-depth-of-binary-tree/#/description
补充一个python的实现:
1 class Solution: 2 def minDepth(self, root: TreeNode) -> int: 3 if root == None: 4 return 0 5 left = self.minDepth(root.left) 6 right = self.minDepth(root.right) 7 if left == 0 or right == 0: 8 return left + right + 1 9 return min(left,right) + 1
Java版本:
1 class Solution { 2 3 public int minDepth(TreeNode root) { 4 if(root == null){ 5 return 0; 6 } 7 if(root.left == null && root.right == null){ 8 return 1; 9 } 10 int minDep = Integer.MAX_VALUE; 11 12 if(root.left != null){ 13 minDep = Math.min(minDepth(root.left),minDep); 14 } 15 16 if(root.right != null){ 17 minDep = Math.min(minDepth(root.right),minDep); 18 } 19 return minDep + 1; 20 } 21 }