Maximum Depth of Binary Tree --- 求二叉树的最大深度

来源:互联网 发布:天泽网络 编辑:程序博客网 时间:2024/05/16 15:13

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;}


总结:

判定过程中容易忽略二叉树为空的情况,以后做题时应首先考略边界及特殊情况,避免出现问题。同时还要练习从多个方面,使用不同的方法去解决问题,拓宽自己的思维广度。

0 0