问题描述
问题链接:https://leetcode.com/problems/maximum-depth-of-binary-tree/#/description
Given a binary tree, find its maximum depth.
The maximum depth is the number of nodes along the longest path from the root node down to the farthest leaf node.
我的代码
思路很简单,就是递归求最大的。
/**
* Definition for a binary tree node.
* public class TreeNode {
* int val;
* TreeNode left;
* TreeNode right;
* TreeNode(int x) { val = x; }
* }
*/
public class Solution {
private int maxDeepCount = Integer.MIN_VALUE;
public int maxDepth(TreeNode root) {
/*
思路就是使用递归来找最大深度。
*/
if(root == null){
return 0;
}
helper(root,1);
return maxDeepCount;
}
private void helper(TreeNode root, int curDeep){
if(curDeep > maxDeepCount){
maxDeepCount = curDeep;
}
if(root.left != null){
helper(root.left, curDeep + 1);
}
if(root.right != null){
helper(root.right, curDeep + 1);
}
}
}
打败了18.63%的Java代码,来学习一下评论区的大神们。
讨论区
Simple solution using Java
这个真的好省事啊。
if the node does not exist, simply return 0. Otherwise, return the 1+the longer distance of its subtree.
public int maxDepth(TreeNode root) {
if(root==null){
return 0;
}
return 1+Math.max(maxDepth(root.left),maxDepth(root.right));
}
Clean Java Iterative Solution
I do believe if you can think of an iterative solution, it’s always better than using a recursive one. And technical y every recursive solution can be converted into a equivalent iterative one.
public int maxDepth(TreeNode root) {
if (root == null)
return 0;
Deque<TreeNode> stack = new LinkedList<TreeNode>();
stack.push(root);
int count = 0;
while (!stack.isEmpty()) {
int size = stack.size();
while (size-- > 0) {
TreeNode cur = stack.pop();
if (cur.left != null)
stack.addLast(cur.left);
if (cur.right != null)
stack.addLast(cur.right);
}
count++;
}
return count;
}