二叉树leetcode(求二叉树深度问题)

在这里插入图片描述
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;
    }
}

在这里插入图片描述

递归展开图

在这里插入图片描述

我们来看这个就是我们第一次往左边递归到叶子节点然后开始返回。这样子也就是意味着我们的左边也是递归完了,我们要开始递归右边。再来看看我们的递归展开图。

在这里插入图片描述
这样就可以算出我们的层数了,所以这题就解决了,下两题我放在下一篇文章。
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/2301_76895050/article/details/134701196