Q:
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.
给出一个二叉树,求最大深度。
A:
若该二叉树为空,则最大深度为0;
若二叉树不为空,则分别将左右子树作为根节点递归调用该方法本身,直到为空,并将深度较大的一侧子树深度值返回,即为该二叉树的最大深度。
代码如下:
/**
* Definition for a binary tree node.
* public class TreeNode {
* int val;
* TreeNode left;
* TreeNode right;
* TreeNode(int x) { val = x; }
* }
*/
public class Solution {
public int maxDepth(TreeNode root) {
if(root == null)
return 0;
else
return (1 + Math.max(maxDepth(root.left), maxDepth(root.right)));
}
}
上述方法用三目运算符可表示为:
public class Solution {
public int maxDepth(TreeNode root) {
return root==null? 0 : Math.max(maxDepth(root.left), maxDepth(root.right))+1;
}
}
LeetCode上的其他大神还提出了不用递归,而是使用桟来解决;我没有想到这种方法,特将代码展示如下:
public int maxDepth(TreeNode root) {
int max = 0;
if (root == null) {return 0;}
Stack<TreeNode> path = new Stack<>();
Stack<Integer> sub = new Stack<>();
path.push(root);
sub.push(1);
while (!path.isEmpty()) {
TreeNode temp = path.pop();
int tempVal = sub.pop();
if (temp.left == null && temp.right == null) {max = Math.max(max, tempVal);}
else {
if (temp.left != null) {
path.push(temp.left);
sub.push(tempVal + 1);
}
if (temp.right != null) {
path.push(temp.right);
sub.push(tempVal + 1);
}
}
}
return max;
}
判定过程中容易忽略二叉树为空的情况,以后做题时应首先考略边界及特殊情况,避免出现问题。同时还要练习从多个方面,使用不同的方法去解决问题,拓宽自己的思维广度。