栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

543. 二叉树的直径(C++题解含VS可运行源码)

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

543. 二叉树的直径(C++题解含VS可运行源码)

543. 二叉树的直径(C++题解含VS可运行源码)
  • 1.题解
    • 递归
  • 2.力扣C++源码
  • 3.VS可运行源码

1.题解 递归
  • 利用递归,对每一个根节点,计算其左边的深度和右边的深度,
  • 左右深度相加即为当前子树的直径,遍历完每一棵子树后最大的那个直径即为二叉树的直径。
  • maxd = max(Left + Right, maxd);//关键代码
2.力扣C++源码
class Solution {
public:
    int maxd = 0;
    int diameterOfBinaryTree(TreeNode* root) {
        depth(root);
        return maxd;
    }
    int depth(struct TreeNode* root) {//求二叉树各个根节点深度
        if (root == NULL) return 0;
        int Left = depth(root->left);
        int Right = depth(root->right);
        maxd = max(Left + Right, maxd);//将每个节点最大直径(左子树深度+右子树深度)当前最大值比较并取大者
        return max(Left, Right) + 1;//返回节点深度
    }
};
3.VS可运行源码
#include
#include
#include
#include
#include
#include
#include
#include
#include
#pragma warning(disable:4996)
using namespace std;

struct TreeNode {
    int val;
    struct TreeNode *left;
    struct TreeNode *right;
};
//利用递归,对每一个根节点,计算其左边的深度和右边的深度,
//左右深度相加即为当前子树的直径,遍历完每一棵子树后最大的那个直径即为二叉树的直径。
//maxd = max(Left + Right, maxd);关键代码
int maxd = 0;
int depth(struct TreeNode* root) {//求二叉树各个根节点深度
    if (root == NULL) return 0;
    int Left = depth(root->left);
    int Right = depth(root->right);
    maxd = max(Left + Right, maxd);//将每个节点最大直径(左子树深度+右子树深度)当前最大值比较并取大者
    return max(Left, Right) + 1;//返回节点深度
}
int diameterOfBinaryTree(struct TreeNode* root) {
    depth(root);
    return maxd;
}

//递归方式创建与遍历
void CreateBiTree1(TreeNode** T)//传的是根指针的指针,这样不用返回值了就
{
    int val;
    scanf("%d", &val);
    if (val == -1)//将叶子节点都设为-1,作为判断输入终止标志,#这个根节点就是NULL
        *T = NULL;//*T就是BiTree T的T或者是BiTNode* T的T
    else
    {
        *T = (TreeNode*)malloc(sizeof(TreeNode));
        if (!*T)//开辟空间失败就退出
            exit(-1);
        (*T)->val = val;
        CreateBiTree1(&(*T)->left);//递归创建
        CreateBiTree1(&(*T)->right);
    }
}
int main()
{
    printf("按先序遍历顺序输入二叉树(叶子节点的左右孩子节点均输入-1):n");
    TreeNode* T;
    CreateBiTree1(&T);//地址传递,传根节点指针的地址
    int ans = diameterOfBinaryTree(T);
    printf("二叉树的直径为:%d", ans);

	printf("n");
	system("pause");
	return 0;
}
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/691308.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号