LEETCODE104.二叉树的最大深度

题目:
 

给定一个二叉树 root ,返回其最大深度。

二叉树的 最大深度 是指从根节点到最远叶子节点的最长路径上的节点数。
LEETCODE104.二叉树的最大深度_第1张图片

输入:root = [3,9,20,null,null,15,7]
输出:3
法一:深度优先搜索
可化简为,求左子树的最大高度和右子树的最大高度,取最大值加1即可

/**
 * Definition for a binary tree node.
 * struct TreeNode {
 *     int val;
 *     TreeNode *left;
 *     TreeNode *right;
 *     TreeNode() : val(0), left(nullptr), right(nullptr) {}
 *     TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}
 *     TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {}
 * };
 */
class Solution {
public:
    int maxDepth(TreeNode* root) 
    {
if(root==nullptr)
return 0;
else
{
    return max(maxDepth(root->left),maxDepth(root->right))+1;
}
    }
};

法二: 广度优先搜索
一层一层
用Q队列来存储
在当前层出队的过程中,将下一层入队

当前层出队完后,层数+1

最后返回层数
 

/**
 * Definition for a binary tree node.
 * struct TreeNode {
 *     int val;
 *     TreeNode *left;
 *     TreeNode *right;
 *     TreeNode() : val(0), left(nullptr), right(nullptr) {}
 *     TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}
 *     TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {}
 * };
 */
class Solution {
public:
    int maxDepth(TreeNode* root) 
    {
        if (root == nullptr)
        {
            return 0;
        } 
        queue Q;//Q来存储每一层的结点
        Q.push(root);
        int ans = 0;//ans用于统计层数
        while (!Q.empty()) 
        {
            int sz = Q.size();//当前层所含结点个数
            while (sz > 0) //遍历所有结点,并将每一个结点的子节点入队
            {
                TreeNode* node = Q.front();//出队的过程中将子节点入队
                Q.pop();
                if (node->left) 
                {
                    Q.push(node->left);
                }
                if (node->right) 
                {
                    Q.push(node->right);
                }
                sz -= 1;
            }
            ans += 1;
        } 
        return ans;
    }
};

你可能感兴趣的:(蓝桥杯备赛,算法)