[LeetCode]二叉树的最大深度

///////////////////////////////////////////////////////////////////////////////////////////////////////

给定一个二叉树,找出其最大深度。

二叉树的深度为根节点到最远叶子节点的最长路径上的节点数。

说明: 叶子节点是指没有子节点的节点。

示例:
给定二叉树 [3,9,20,null,null,15,7]

    3
   / \
  9  20
    /  \
   15   7

返回它的最大深度 3 。

///////////////////////////////////////////////////////////////////////////////////////////////////////

树的遍历还是用递归比较好,虽然很长时间不碰代码,但还是硬着头皮写了。

思路很简单,每遍历一个结点,层数计数+1,直到叶子节点,把得到的层数与最大层数比较大小,最终返回最大层数。

果然,还是写的太笨了,放在这仅供参考。

class Solution 
{
	int mdepth = 0;
public:
	int isEnd(int d, TreeNode *r)
	{
		d++;
		TreeNode *left = r->left;
		TreeNode *right = r->right;
		if (left == NULL)
		{
			if (d > mdepth)
				mdepth = d;
		}
		else
			isEnd(d, left);
		if (right == NULL)
		{
			if (d > mdepth)
				mdepth = d;
		}
		else
			isEnd(d, right);
		return mdepth;
	}

	int maxDepth(TreeNode* root) 
	{
		int depth = 0;
		if (root == NULL)
			return mdepth;
		mdepth = isEnd(depth, root);
		return mdepth;
	}
};

顺便贴一个4ms的范例:

class Solution {
public:
    int maxDepth(TreeNode* root) {
        int max = 0;
        if (root != NULL) {
            max++;
            int max_left = maxDepth(root->left);
            int max_right = maxDepth(root->right);

            max += max_left>max_right ? max_left:max_right;
        }
        return max;
    }
};

差距可以说是很明显了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值