当前位置: 首页 > news >正文

商城网站建设分为几块厦门seo排名收费

商城网站建设分为几块,厦门seo排名收费,宁波seo哪家最便宜,做警员编号网站LeetCode 热题 100_二叉树的直径(40_543) 题目描述:输入输出样例:题解:解题思路:思路一(递归): 代码实现代码实现(思路一(递归)&#…

LeetCode 热题 100_二叉树的直径(40_543)

    • 题目描述:
    • 输入输出样例:
    • 题解:
      • 解题思路:
        • 思路一(递归):
      • 代码实现
        • 代码实现(思路一(递归)):
        • 以思路一为例进行调试

题目描述:

给你一棵二叉树的根节点,返回该树的 直径

二叉树的 直径 是指树中任意两个节点之间最长路径的 长度 。这条路径可能经过也可能不经过根节点 root 。

两节点之间路径的 长度 由它们之间边数表示。

输入输出样例:

示例 1:
在这里插入图片描述

输入:root = [1,2,3,4,5]
输出:3
解释:3 ,取路径 [4,2,1,3] 或 [5,2,1,3] 的长度。

示例 2:
输入:root = [1,2]
输出:1

提示:
树中节点数目在范围 [1, 104] 内
-100 <= Node.val <= 100

题解:

解题思路:

思路一(递归):

1、我们可以采用和计算二叉树深度同样的思想,计算二叉树的深度是挑选左右子树中深度的最大值,而二叉树的直径是左子树的最大深度深度+右子树的最大深度。
2、复杂度分析:
① 时间复杂度:O(N),其中 N 为二叉树的节点数,即遍历一棵二叉树的时间复杂度,每个结点只被访问一次。
② 空间复杂度:O(h),其中 h 为二叉树的高度(递归需要额外的栈空间)。
本题的力扣官方题解链接(非常不错)

代码实现

代码实现(思路一(递归)):
//二叉树的直径
int diameterOfBinaryTree(TreeNode* root) {depth(root);return ans;
}int depth(TreeNode *root){if(root==nullptr) return 0;//left:左子树的高度(高度指从叶结点开始测量)int left=depth(root->left);//right:右子树的高度int right=depth(root->right);//更新树的最大直径ans=max((left+right),ans);// 返回当前节点的深度return max(left,right)+1;
}
以思路一为例进行调试
#include<iostream>
#include<vector>
#include<queue>
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 Soluton
{int ans=0;//注意递归返回的是深度,所以我们要分成两个函数int depth(TreeNode *root){if(root==nullptr) return 0;//left:左孩子子树的高度(高度指从叶结点开始测量)int left=depth(root->left);//right:右孩子子树的高度int right=depth(root->right);//求当前两节点间的最大长度ans=max((left+right),ans);return max(left,right)+1;}public://二叉树的直径int diameterOfBinaryTree(TreeNode* root) {depth(root);return ans;}//通过数组创建二叉树(数组元素为-1代表nullptr)TreeNode *creatTree(vector<int> nums){if(nums.empty()) return nullptr;TreeNode *root=new TreeNode(nums[0]);queue<TreeNode *> q;q.push(root);int i=1;while (i<nums.size()){TreeNode *node=q.front();q.pop();if(i<nums.size()&&nums[i]!=-1){node->left=new TreeNode(nums[i]);q.push(node->left);}++i;if(i<nums.size()&&nums[i]!=-1){node->right=new TreeNode(nums[i]);q.push(node->right);}++i;}return root;}//中序遍历输出二叉树(用于调试二叉树创建是否正确)void inorder(TreeNode *root){if(root==nullptr) return ;inorder(root->left);cout<<root->val<<" ";inorder(root->right);} 
};int main(){vector<int> nums={1,2,3,4,5};Soluton s;//创建二叉树TreeNode *root=s.creatTree(nums);//调试二叉树是否创建正确//s.inorder(root); cout<<"二叉树的直径:"<<s.diameterOfBinaryTree(root);return 0;
}

LeetCode 热题 100_二叉树的直径(40_543)原题链接
欢迎大家和我沟通交流(✿◠‿◠)

http://www.dinnco.com/news/35661.html

相关文章:

  • 2008iis 网站 打不开总裁班课程培训
  • 网站备案 域名不是自己的东台网络推广
  • 企业做网站需要什么seo优化是怎么优化的
  • 怎么自己开网站做时时彩做电商如何起步
  • 做自己的网站的作用网上国网app推广方案
  • 网络小说网站推广策划方案怎么给产品找关键词
  • 高端制作网站公司成都百度推广公司电话
  • 便宜网站建设泰安做网站公司
  • 网站企业优化宁波关键词优化平台
  • 电子商务有限公司网站seo推广需要多少钱
  • 百度微信网站日照seo优化
  • 深圳做网站哪家公司最好百度小说app下载
  • 哪里可以做网站开发百度刷首页怎么刷
  • 赣州网站建设怎么样重庆森林
  • 网站开发怎样实现上传视频教程一个企业seo网站的优化流程
  • 郑州的做网站公司2024新闻热点事件
  • wordpress选项卡怎么设置seo零基础教学视频
  • 做网站排名要懂那些深圳网站建设三把火科技
  • 攻把受做哭了gv网站网址信息查询
  • 哪里可以学做网站武汉网站快速排名提升
  • 长沙公司代办网站搜索优化方法
  • 做网站推广的方法国家市场监督管理总局
  • 青岛外贸网站制作seo新站如何快速排名
  • 网站系统怎样推广app
  • 景安建网站重庆seo代理
  • php做门户网站长沙网络公司排名
  • 网站怎么做移动的图片谷歌优化技巧
  • 会员管理网站ASP建设白酒营销策划方案
  • 水产网站源码怎么做推广和宣传平台
  • 网站建设案例分析网络营销的50种方法