前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >二叉树最大深度

二叉树最大深度

作者头像
大忽悠爱学习
发布2021-04-01 16:50:00
2700
发布2021-04-01 16:50:00
举报
文章被收录于专栏:c++与qt学习c++与qt学习
在这里插入图片描述
在这里插入图片描述

1,递归

在这里插入图片描述
在这里插入图片描述
代码语言:javascript
复制
#include<iostream>
using namespace std;
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 == NULL)
            return 0;//说明为叶子节点,深度为0
        int lheight = maxDepth(root->left);//获取左子树最大深度
        int rheight = maxDepth(root->right);//获取右子树最大深度
        return lheight>rheight?lheight+1:rheight+1;
    }
};
void test()
{
    TreeNode t1 = { 3,NULL,NULL };
    TreeNode t2 = { 9,NULL,NULL };
    TreeNode t3 = { 20,NULL,NULL };
    TreeNode t4 = { 15,NULL,NULL };
    TreeNode t5 = { 7,NULL,NULL };
    t1.left = &t2;
    t1.right = &t3;
    t3.left = &t4;
    t3.right = &t5;
    Solution s;
    int ret=s.maxDepth(&t1);
    cout << "最大深度:" << ret << endl;
}
int main()
{
    test();
    system("pause");
    return 0;
}
在这里插入图片描述
在这里插入图片描述

简化版递归:

代码语言:javascript
复制
  int maxDepth(TreeNode* root) 
    {
        //如果root==NULL满足就返回0,表示是叶子节点,深度为0
        //否则返回当前节点左右子树中最深的深度
        return root==NULL ? 0 : max(maxDepth(root->left), maxDepth(root->right)) + 1;
    }

BFS—深度优先遍历—类似层序遍历

在这里插入图片描述
在这里插入图片描述

思路:每一次把当前层的节点都放入队列中,记录当前层上存在几个节点,然后再次进行循环,把队列中的元素挨个出队,每有一个元素出队,就判断他有没有左右子树,如果有就把左右子树的节点放入队列中,队列中元素出队个数就是记录当前层数上的节点个数。没当一层上的节点都出队完,就相当于此树存在一层,用一个变量记录层数。

代码语言:javascript
复制
    int maxDepth(TreeNode* root) 
    {
        if (root == NULL)
            return 0;
        deque<TreeNode*> queue;
        queue.push_back(root);
        int count = 0;//计算当前层数
        while (!queue.empty())
        {
            int size = queue.size();//计算当前层节点个数
            while (size-- > 0)//队列中还存在元素
            {
                //先获取当前队列中第一个节点
                TreeNode* node = queue.front();
                //当前队列中第一个节点出队
                queue.pop_front();
                //将当前节点的左右子树加入队列
                if (node->left)
                {
                    queue.push_back(node->left);
                }
                if (node->right)
                {
                    queue.push_back(node->right);
                }
            }
            count++;//当前层元素出队完毕,下一层元素已经全部加入队列中,层数加一
        }
        return count;
    }

DFS—深度优先遍历—类似前序遍历

就是法1的递归算法

在这里插入图片描述
在这里插入图片描述
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2021-03-27 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1,递归
  • BFS—深度优先遍历—类似层序遍历
  • DFS—深度优先遍历—类似前序遍历
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档