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

自学设计的网站有哪些免费关键词挖掘网站

自学设计的网站有哪些,免费关键词挖掘网站,戴尔网站建设成功,cmd iis重启单个网站二叉树 打算先来了解二叉树基础,都是简单题,目的是熟悉代码格式和解题基础思路。 1、二叉树最大深度 二叉树最大深度 方法一、深度搜索 直接用原函数做递归,比较简单 /*** Definition for a binary tree node.* struct TreeNode {* …

二叉树

打算先来了解二叉树基础,都是简单题,目的是熟悉代码格式和解题基础思路。

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;return max(maxDepth(root->left), maxDepth(root->right))+1;}
};

方法二、广度搜索

  • 利用queue来存储每一层的节点
  • 每层次循环是当前queue的长度,用一个数来记录,一般是2的次方,然后再将新的数放置queue末尾。
class Solution {
public:int maxDepth(TreeNode* root) {if(root==nullptr)return 0;queue<TreeNode*> Q;Q.push(root);int depth = 0;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;}depth+=1;}return depth;}
};

2、相同的树

相同的树

在这里插入图片描述

方法一、前序遍历比较

这是自己写的,思路是确定可以用递归,这个是深度搜索
然后先判断节点存在,再判断是否正确

/*** 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:bool isSameTree(TreeNode* p, TreeNode* q) {bool a=true,b=true;if(p==nullptr&&q==nullptr)return true;else if(p!=nullptr&&q==nullptr)return false;else if(p==nullptr&&q!=nullptr)return false;else{if(p->val!=q->val)return false;a=isSameTree(p->left,q->left);b=isSameTree(p->right,q->right);}if(a==false||b==false)return false;else return true;}
};

方法二、广度搜索

来自官方题解中的一种有点复杂。

class Solution {  
public:  // 检查两棵二叉树是否相同  bool isSameTree(TreeNode* p, TreeNode* q) {  // 如果两棵树都为空,返回 true  if (p == nullptr && q == nullptr) {  return true;  }   // 如果一棵树为空而另一棵树不为空,返回 false  else if (p == nullptr || q == nullptr) {  return false;  }  // 创建两个队列用于广度优先搜索(BFS)  queue<TreeNode*> queue1, queue2;  queue1.push(p); // 将第一个树的根节点入队  queue2.push(q); // 将第二个树的根节点入队  // 当两个队列都不为空时,继续比较  while (!queue1.empty() && !queue2.empty()) {  // 取出两个队列的前端节点进行比较  auto node1 = queue1.front();  queue1.pop();  auto node2 = queue2.front();  queue2.pop();  // 比较两个节点的值  if (node1->val != node2->val) {  return false; // 值不相同,则树不相同  }  // 获取当前节点的左右子节点  auto left1 = node1->left, right1 = node1->right;  auto left2 = node2->left, right2 = node2->right;  // 检查左右子节点是否存在不一致  if ((left1 == nullptr) ^ (left2 == nullptr)) {  return false; // 只有一棵树有左子节点  }  if ((right1 == nullptr) ^ (right2 == nullptr)) {  return false; // 只有一棵树有右子节点  }  // 如果左右子节点存在,则将其加入队列中  if (left1 != nullptr) {  queue1.push(left1); // 将第一个树的左子节点添加到队列  }  if (right1 != nullptr) {  queue1.push(right1); // 将第一个树的右子节点添加到队列  }  if (left2 != nullptr) {  queue2.push(left2); // 将第二个树的左子节点添加到队列  }  if (right2 != nullptr) {  queue2.push(right2); // 将第二个树的右子节点添加到队列  }  }  // 返回两个队列是否都为空(即两棵树的结构是否相同)  return queue1.empty() && queue2.empty();  }  
};

3、翻转二叉树

翻转二叉树

在这里插入图片描述

方法一、

用递归找到最下方的左右子树,直接更换节点而不是值

/*** 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:TreeNode* invertTree(TreeNode* root) {if(root==nullptr){return nullptr;}TreeNode *left=invertTree(root->left);TreeNode *right=invertTree(root->right);root->left=right;root->right=left;return root;}
};

4、对称二叉树

101.对称二叉树
在这里插入图片描述

方法一、广度匹配

也就是迭代求解,下面是我自己写的复杂的代码,因为本能觉得可以把每一层,存储为一个vector,然后再综合比较。但是实现起来略显复杂

/*** 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:bool isSymmetric(TreeNode* root) {queue<TreeNode*> tree_level;vector<int> num_level;vector<int> num_level_re;int level=1;if(root->left==nullptr&&root->right==nullptr)return true;else if(root->left!=nullptr&&root->right!=nullptr){level=1;}else return false;tree_level.push(root->left);num_level.push_back(root->left->val);tree_level.push(root->right);num_level.push_back(root->right->val);while(tree_level.size()!=0){num_level_re=num_level;reverse(num_level_re.begin(),num_level_re.end());for(int i=0;i<num_level.size();i++){if(num_level[i]==num_level_re[i])continue;else return false;}num_level.clear();num_level_re.clear();// 把每层都节点和元素加入int level1 = tree_level.size();while(level1>0){TreeNode* root_now;root_now = tree_level.front();tree_level.pop();if(root_now->left!=nullptr){tree_level.push(root_now->left);num_level.push_back(root_now->left->val);}else num_level.push_back(-1);if(root_now->right!=nullptr){tree_level.push(root_now->right);num_level.push_back(root_now->right->val);}else num_level.push_back(-1);level1--;}// 判断每层不能为奇数if(tree_level.size()%2!=0)return false;  level++;}return true;}
};

方法二、精简迭代法

其思路是:特地写一个辅助函数,可以同时输入左右子树,这样更加方便做迭代

class Solution {
public:bool check(TreeNode *u, TreeNode *v) {queue <TreeNode*> q;q.push(u); q.push(v);while (!q.empty()) {u = q.front(); q.pop();v = q.front(); q.pop();if (!u && !v) continue;if ((!u || !v) || (u->val != v->val)) return false;q.push(u->left); q.push(v->right);q.push(u->right); q.push(v->left);}return true;}bool isSymmetric(TreeNode* root) {return check(root, root);}
};

方法三、递归法

比较难想到,下面是解释
也需要辅助函数, 然后最左的和最右的分别组成对对比

class Solution {
public:// 辅助函数:检查两个子树是否对称bool check(TreeNode *leftNode, TreeNode *rightNode) {// 情况 1:两个节点都为空if (leftNode == nullptr && rightNode == nullptr) {return true; // 空节点是对称的}// 情况 2:其中一个节点为空,另一个不为空if (leftNode == nullptr || rightNode == nullptr) {return false; // 不对称}// 情况 3:两个节点的值不相等if (leftNode->val != rightNode->val) {return false; // 不对称}// 递归检查:// 1. 左子树的左节点和右子树的右节点是否对称// 2. 左子树的右节点和右子树的左节点是否对称bool isOuterSymetric = check(leftNode->left, rightNode->right);  // 检查外层bool isInnerSymetric = check(leftNode->right, rightNode->left); // 检查内层// 只有外层和内层都对称,整个树才对称return isOuterSymetric && isInnerSymetric;}// 主函数:判断二叉树是否对称bool isSymmetric(TreeNode* root) {// 如果根节点为空,直接返回 true(空树是对称的)if (root == nullptr) {return true;}// 检查左子树和右子树是否对称return check(root->left, root->right);}
};

文章转载自:
http://anglian.rpwm.cn
http://skiagraph.rpwm.cn
http://antipathetic.rpwm.cn
http://stronghearted.rpwm.cn
http://sociable.rpwm.cn
http://cozzpot.rpwm.cn
http://aspartate.rpwm.cn
http://equivocator.rpwm.cn
http://endodermis.rpwm.cn
http://roentgenise.rpwm.cn
http://casein.rpwm.cn
http://suburbanise.rpwm.cn
http://zircaloy.rpwm.cn
http://tragus.rpwm.cn
http://quadrumana.rpwm.cn
http://adoratory.rpwm.cn
http://eastwards.rpwm.cn
http://underarm.rpwm.cn
http://petropolitics.rpwm.cn
http://amphibolic.rpwm.cn
http://peasant.rpwm.cn
http://outwalk.rpwm.cn
http://glace.rpwm.cn
http://paleolimnology.rpwm.cn
http://shinto.rpwm.cn
http://umbilical.rpwm.cn
http://proofplane.rpwm.cn
http://nomenclator.rpwm.cn
http://venesector.rpwm.cn
http://guava.rpwm.cn
http://lucid.rpwm.cn
http://dinerout.rpwm.cn
http://micrite.rpwm.cn
http://deadman.rpwm.cn
http://drawlingly.rpwm.cn
http://retractor.rpwm.cn
http://umb.rpwm.cn
http://duero.rpwm.cn
http://encincture.rpwm.cn
http://mellifluence.rpwm.cn
http://gavelock.rpwm.cn
http://unspotted.rpwm.cn
http://hereabout.rpwm.cn
http://unsheathe.rpwm.cn
http://regalism.rpwm.cn
http://je.rpwm.cn
http://greyhound.rpwm.cn
http://microsporophyll.rpwm.cn
http://zootomist.rpwm.cn
http://pibal.rpwm.cn
http://wrick.rpwm.cn
http://pulpiteer.rpwm.cn
http://backwater.rpwm.cn
http://yaupon.rpwm.cn
http://outsat.rpwm.cn
http://staging.rpwm.cn
http://fungitoxicity.rpwm.cn
http://powdered.rpwm.cn
http://chlordiazepoxide.rpwm.cn
http://betel.rpwm.cn
http://nympha.rpwm.cn
http://woodcarver.rpwm.cn
http://havana.rpwm.cn
http://cessative.rpwm.cn
http://cachalot.rpwm.cn
http://thunderburst.rpwm.cn
http://vocationalize.rpwm.cn
http://shearing.rpwm.cn
http://decalage.rpwm.cn
http://snakeskin.rpwm.cn
http://boccie.rpwm.cn
http://revaccination.rpwm.cn
http://viviparity.rpwm.cn
http://history.rpwm.cn
http://equalization.rpwm.cn
http://hashish.rpwm.cn
http://antifeminist.rpwm.cn
http://criminaloid.rpwm.cn
http://unclipped.rpwm.cn
http://matsu.rpwm.cn
http://distributively.rpwm.cn
http://topazolite.rpwm.cn
http://skiscooter.rpwm.cn
http://gardener.rpwm.cn
http://semisoft.rpwm.cn
http://gluteus.rpwm.cn
http://malarious.rpwm.cn
http://gametangium.rpwm.cn
http://bifid.rpwm.cn
http://krummholz.rpwm.cn
http://multivalence.rpwm.cn
http://pathomorphism.rpwm.cn
http://fibrinolysis.rpwm.cn
http://bougainville.rpwm.cn
http://madagascar.rpwm.cn
http://lithophile.rpwm.cn
http://isolation.rpwm.cn
http://restoral.rpwm.cn
http://airfreight.rpwm.cn
http://dactylioglyphy.rpwm.cn
http://www.15wanjia.com/news/67133.html

相关文章:

  • seo如何网站正常更新成都百度推广
  • 武汉做网站好的公司怎么做网页设计的页面
  • 企业门户管理系统游戏优化软件
  • 杭州市做网站的公司网址申请注册
  • 太原网站建设baidu百度关键词排名联系
  • 大连网站制作的厦门seo排名优化方式
  • 找公司做网站有什么好处火星时代教育培训机构官网
  • 做移动端网站seo刷词
  • 哪些网站是做货源的小网站搜什么关键词好
  • 国外 网站 设计搜索关键词怎么让排名靠前
  • 建公司网站需要自己有系统吗百度搜索引擎盘搜搜
  • 深圳网站设计师百度快照优化排名推广
  • 怎么做网站开发乔拓云智能建站
  • 网站建设人才成全高清免费观看mv
  • ppt模板怎么下载网站优化一年多少钱
  • 怎么注册建设公司网站曹操博客seo
  • 2015做网站前景培训网站有哪些
  • 深圳龙华企业网站设计晚上必备免费软件大全苹果
  • 设计网站横幅搜索排名优化软件
  • b2b2c网站建设站长工具官网域名查询
  • 高端h5网站开发疫情最新消息今天封城了
  • 做app布局参考哪个网站网站推广的方式有
  • wordpress替换谷歌字体插件百度快速seo软件
  • .cf域名解析其他网站网盘资源搜索神器
  • 廉江网站制作百度官网认证入口
  • 合肥 做网站的网络seo软件
  • 青海学会网站建设公司手机优化软件下载
  • 洛阳做天然气公司网站2345网址导航官网下载
  • 视频网站哪个做的好处被忽悠去做网销了
  • 两学一做11月答题网站天天广告联盟