首页 > 其他分享 >543. 二叉树的直径

543. 二叉树的直径

时间:2023-01-11 10:23:08浏览次数:40  
标签:right TreeNode res 543 二叉树 直径 null root left

题目

给定一棵二叉树,你需要计算它的直径长度。一棵二叉树的直径长度是任意两个结点路径长度中的最大值。这条路径可能穿过也可能不穿过根结点。

注意:两结点之间的路径长度是以它们之间边的数目表示。

输入输出

input:[1,2,3,4,5]
output:3

image

input:[4,-7,-3,null,null,-9,-3,9,-7,-4,null,6,null,-6,-6,null,null,0,6,5,null,9,null,null,-1,-4,null,null,null,-2]
output:8

image

代码

/**
 * 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 diameterOfBinaryTree(TreeNode* root) {
        int res = 0,mmm = 0;
        if(root==nullptr){
            return 0;
        }
		//求分别以该节点,该节点的左子树与右子树为根的长度
        res = max(res,max(diameterOfBinaryTree2(root),max(diameterOfBinaryTree2(root->right),diameterOfBinaryTree2(root->left))));
		//递归每个节点,以每个节点为根求最大值
        res = max(res,max(diameterOfBinaryTree(root->right),diameterOfBinaryTree(root->left)));
        return res;
    }

    //求以该节点为根,左右两颗子树的长度之和,即最大长度
    int diameterOfBinaryTree2(TreeNode* root) {
        int res = 0;
        if(root==nullptr){
            return 0;
        }
        return res+diameterOfBinaryTree1(root->right)+diameterOfBinaryTree1(root->left);

    }
	
	//求左右子树边的数量
    int diameterOfBinaryTree1(TreeNode* root) {
        int res = 0;
        if(root==nullptr){
            return 0;
        }
        res++;
        res+=max(diameterOfBinaryTree1(root->right),diameterOfBinaryTree1(root->left));
        return res;

    }
};

标签:right,TreeNode,res,543,二叉树,直径,null,root,left
From: https://www.cnblogs.com/java-six/p/17042988.html

相关文章

  • 算法刷题 Day 14 | 二叉树的递归遍历
    今日内容:理论基础递归遍历迭代遍历统一迭代详细布置理论基础需要了解二叉树的种类,存储方式,遍历方式以及二叉树的定义文章讲解:https://programm......
  • 重建二叉树
    题目描述思路分析在中序遍历列表中找到先序遍历列表中第一个节点,以此为界限可以将二叉树分为左右子树,可以得知左子树和右子树的长度,在先序遍历列表中划分出来。再依次拿......
  • 二叉树
    1.二叉树的概念二叉树是n个有限元素的集合,该集合或为空、或由一个根节点及两个不相交的、被分别称为左子树和右子树的二叉树组成,是有序树。当集合为空时,称该二叉树为......
  • 代码随想录day14 LeetCode 144.二叉树的前序遍历 145.二叉树的后序遍历 94.二叉树的中
    144.二叉树的前序遍历classSolution{public:vector<int>v;vector<int>preorderTraversal(TreeNode*root){if(root==NULL)returnv;......
  • 树的直径的两种求法
    树的直径:给定一颗树,树的每条边都有一个权值,树中任意两点都有一条唯一路径,路径长度为连接两点的路径上的边权之和,路径长度最长的一条为树的直径,往往说的直径既可以指路径......
  • 力扣102 二叉树的层序遍历(广度优先搜索)
    题目:给你二叉树的根节点root,返回其节点值的层序遍历。(即逐层地,从左到右访问所有节点)。示例:输入:root=[3,9,20,null,null,15,7]输出:[[3],[9,20],[15,7]]思......
  • 力扣226 翻转二叉树
    题目:给你一棵二叉树的根节点root,翻转这棵二叉树,并返回其根节点。示例:输入:root=[4,2,7,1,3,6,9]输出:[4,7,2,9,6,3,1] ......
  • 判断是不是平衡二叉树
    题目描述输入一棵节点数为n二叉树,判断该二叉树是否是平衡二叉树。在这里,我们只需要考虑其平衡性,不需要考虑其是不是排序二叉树平衡二叉树(BalancedBinaryTree),具有以......
  • 判断是不是完全二叉树
    题目要求给定一个二叉树,确定他是否是一个完全二叉树。完全二叉树的定义:若二叉树的深度为h,除第h层外,其它各层的结点数都达到最大个数,第h层所有的叶子结点都连续集中......
  • 二叉树由前序遍历和中序遍历求后序遍历
    题目:二叉树遍历问题描述给定一棵二叉树的先序遍历和中序遍历序列,求其后序遍历序列。输入格式输入数据有两行,为两个字符串,其长度n均小于等于26。第一行为先序遍历序......