【二叉树练习】 - 二叉树的最大深度

题目描述

描述
给定一个二叉树,找出其最大深度。
二叉树的深度为根节点到最远叶子节点的最长路径上的节点数

叶子节点是指没有子节点的节点


解题分析:

思路:
分治算法:先求左,右子树的深度,再取深度大的+根节点1(左右子树继续分解成以上两步)


代码实现:

struct TreeNode
{
	struct BinaryTreeNode* left;//根节点的左子树
	struct BinaryTreeNode* right;//根节点的右子树
	int data;//根节点的值
};

//思路:分治算法
//1、树为空,高度为0
//2、树非空,分解子问题
//		先求左,右子树的深度,再取深度大的+根节点1(左右子树继续分解成以上两步)

/*
int maxDepth(struct TreeNode* root)//注意:root表示节点指针,第一次调用指根节点
{
	if (root == NULL)
	{
		return 0;
	}
	return maxDepth(root->left) > maxDepth(root->right) ? 
			maxDepth(root->left) + 1 : maxDepth(root->right) + 1;
}
*/
//画递归展开图可知:函数递归结果没有保存,maxDepth(root->left)和maxDepth(root->right)函数递归执行完了,
//两结果比较时,返回结果的时候,还要调用maxDepth(root->left)或maxDepth(root->right)执行一遍,影响效率。

//优化:
int maxDepth(struct TreeNode* root)//注意:root表示节点指针,第一次调用指根节点
{
	if (root == NULL)
	{
		return 0;
	}
	int leftDepth = maxDepth(root->left);
	int rightDepth = maxDepth(root->right);
	return leftDepth > rightDepth ? leftDepth + 1 : rightDepth + 1;
}

int main()
{
	//测试功能
	struct TreeNode node1;
	struct TreeNode node2;
	struct TreeNode node3;
	node1.data = 1;
	node1.left = &node2;
	node1.right = &node3;

	node2.data = 2;
	node2.left = NULL;
	node2.right = NULL;

	node3.data = 3;
	node3.left = NULL;
	node3.right = NULL;

	int  MaxDepth = maxDepth(&node1);
	printf("%d ", MaxDepth);

	return 0;
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值