today我们来练习三道leetcode上的有关于二叉树的题目,都是一些基础的二叉树题目,那让我们一起来学习一下吧。
https://leetcode.cn/problems/maximum-depth-of-binary-tree/submissions/
看题目描述是让我们来求出二叉树的深度,我们以第一个父节点就是我们二叉树的第一层,然后依次往下数,我们要求的就是我们最大层数,我们可以考虑我们用递归的方式。
我们先把这个问题分成子问题,首先我们知道二叉树是由好多的子树组成,那我们的每一子树都是由一个左孩子和一个右孩子,如果两个孩子都是空就是叶子节点,那我们这道题的子问题就可以变成,如果这个父亲节点是有孩子的,证明就是有层数的,这个时候我们就可以加上一层,但是我们也知道,一般的二叉树并不是都有左右孩子节点的,这个时候我们就应该返回有孩子节点那边的数量加上1,这是对于叶子节点,如果是非叶子节点的时候我们得返回值大的那个孩子加上1就是当前有几层,依次递归就可以算出我们的节点个数了。我们先来看我们的代码,然后来看看递归展开图就能更好的理解了。
int maxDepth(struct TreeNode* root) {
if(root == NULL)
{
return 0;
}
if(!root->left && !root->right)
{
return 1;
}
int leftdepth = maxDepth(root->left);
int rightdepth = maxDepth(root->right);
if(leftdepth > rightdepth)
{
return leftdepth+1;
}
else
{
return rightdepth+1;
}
}
递归展开图
我们来看这个就是我们第一次往左边递归到叶子节点然后开始返回。这样子也就是意味着我们的左边也是递归完了,我们要开始递归右边。再来看看我们的递归展开图。
这样就可以算出我们的层数了,所以这题就解决了,下两题我放在下一篇文章。