题目链接:
二叉树的最大深度_牛客题霸_牛客网 (nowcoder.com)
题目简介:
描述
求给定二叉树的最大深度,
深度是指树的根节点到任一叶子节点路径上节点的数量。
最大深度是所有叶子节点的深度的最大值。
(注:叶子节点是指没有子节点的节点。)
数据范围:0≤n≤100000,树上每个节点的val满足 ∣val∣≤100
要求: 空间复杂度 O(1),时间复杂度 O(n)
题目解法:
#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>
/*BM28 二叉树的最大深度
*描述
求给定二叉树的最大深度,
深度是指树的根节点到任一叶子节点路径上节点的数量。
最大深度是所有叶子节点的深度的最大值。(注:叶子节点是指没有子节点的节点。)
数据范围: 0≤n≤100000,树上每个节点的val满足 ∣val∣≤100
要求: 空间复杂度 O(1) ,时间复杂度 O(n)
*/
struct TreeNode {
int val;
struct TreeNode *left;
struct TreeNode *right;
};
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
*
*
* @param root TreeNode类
* @return int整型
*/
void recursion(struct TreeNode* node, int *maxDepth){
static int tmpDepth = 1; //初始化当前深度为1,根节点
if(*maxDepth < tmpDepth) *maxDepth = tmpDepth; //如果当前深度大于最大深度,则更新最大深度
if(!node->left && !node->right){ //如果该节点的左右子节点都不存在,则该节点是叶子节点,返回并深度-1
tmpDepth--;
return;
}
if(node->left) { //如果左子节点存在,深度+1并递归
tmpDepth++;
recursion(node->left, maxDepth);
}
if(node->right) {
tmpDepth++;
recursion(node->right, maxDepth);
}
tmpDepth--; //该节点左右子节点遍历完,深度-1并返回到上一次调用递归的位置。
}
int maxDepth(struct TreeNode* root ) {
// write code here
static int maxDepth = 0; //最大深度初始为0
if(root) recursion(root, &maxDepth); //根节点不存在则返回0
return maxDepth;
}
/**************************end******************************************/
int main ()
{
int returnSize = 0;
int* returnColumnSizes;
// struct TreeNode n22 ={.val =5 , .left = NULL, .right = NULL};
// struct TreeNode n21 ={.val =4 , .left = NULL, .right = NULL};
// struct TreeNode n2 ={.val =3 , .left = &n21, .right = &n22};
// struct TreeNode n1 ={.val =2 , .left = NULL, .right = NULL};
// struct TreeNode root ={.val =1 , .left = &n1, .right = &n2};
// struct TreeNode n222 ={.val =1 , .left = NULL, .right = NULL};
// struct TreeNode n221 ={.val =3 , .left = NULL, .right = NULL};
// struct TreeNode n212 ={.val =5 , .left = NULL, .right = NULL};
// struct TreeNode n211 ={.val =7 , .left = NULL, .right = NULL};
// struct TreeNode n22 ={.val =14 , .left = &n221, .right = &n222};
// struct TreeNode n21 ={.val =10 , .left = &n211, .right = &n212};
// struct TreeNode n2 ={.val =12 , .left = &n21, .right = &n22};
// struct TreeNode n122 ={.val =9 , .left = NULL, .right = NULL};
// struct TreeNode n121 ={.val =11 , .left = NULL, .right = NULL};
// struct TreeNode n112 ={.val =13 , .left = NULL, .right = NULL};
// struct TreeNode n111 ={.val =15 , .left = NULL, .right = NULL};
// struct TreeNode n12 ={.val =6 , .left = &n121, .right = &n122};
// struct TreeNode n11 ={.val =2 , .left = &n111, .right = &n112};
// struct TreeNode n1 ={.val =4 , .left = &n11, .right = &n12};
// struct TreeNode root ={.val =8 , .left = &n1, .right = &n2};
struct TreeNode n12 ={.val =6 , .left = NULL, .right = NULL};
struct TreeNode n11 ={.val =2 , .left = NULL, .right = NULL};
struct TreeNode n1 ={.val =4 , .left = &n11, .right = &n12};
struct TreeNode root ={.val =1 , .left = &n1, .right = NULL};
int ret = maxDepth(&root);
printf("%d\t", ret);
return 0;
}