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

题目描述

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

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


解题分析:

思路:
分治算法:先求左,右子树的深度,再取深度大的+根节点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;
}

猜你喜欢

转载自blog.csdn.net/qq_48163964/article/details/130149699