【Leetcode】Maximum Depth of Binary Tree

本文介绍了两种求解二叉树最大深度的方法:递归法和迭代法。递归法通过深度优先搜索来确定从根节点到最远叶节点的最长路径上的节点数。迭代法则利用队列实现广度优先搜索,逐层遍历树的所有节点,直至遍历完整棵树。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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.


Java:

Recursion

http://blog.youkuaiyun.com/u010119170/article/details/24739435

/**
 * Definition for binary tree
 * 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;
        }
        int leftDepth=maxDepth(root.left);
        int rightDepth=maxDepth(root.right);
        return leftDepth > rightDepth ? leftDepth + 1 : rightDepth + 1;
        //if leftDepth is larger, left Depth +1; 
    }
}

Iteration

水印人生:http://gongxuns.blogspot.com/2012/12/leetcodemaximum-depth-of-binary-tree.html

public class Solution {
    public int maxDepth(TreeNode root) {
        // Start typing your Java solution below
        // DO NOT write main() function
        ArrayList<TreeNode> prev = new ArrayList<TreeNode>();
        
        if(root!=null) prev.add(root);
        int depth=0;
        while(!prev.isEmpty()){
            ArrayList<TreeNode> temp = new ArrayList<TreeNode> ();
            for(TreeNode node:prev){
                if(node.left!=null) temp.add(node.left);
                if(node.right!=null) temp.add(node.right);
            }    
            prev = new ArrayList<TreeNode>(temp);
            depth++;
        }
        return depth;
    }
}

http://blog.youkuaiyun.com/linhuanmars/article/details/19659525?reload

public int maxDepth(TreeNode root) {
    if(root == null)
        return 0;
    int level = 0;
    LinkedList<TreeNode> queue = new LinkedList<TreeNode>();
    queue.add(root);
    int curNum = 1; //num of nodes left in current level
    int nextNum = 0; //num of nodes in next level
    while(!queue.isEmpty())
    {
        TreeNode n = queue.poll();
        curNum--;
        if(n.left!=null)
        {
            queue.add(n.left);
            nextNum++;
        }
        if(n.right!=null)
        {
            queue.add(n.right);
            nextNum++;
        }
        if(curNum == 0)
        {
            curNum = nextNum;
            nextNum = 0;
            level++;
        }
    }
    return level;
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值