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

佛山企业做网站建设营销网站

佛山企业做网站,建设营销网站,京东网上商城首页,疫情新情况今天怎么样目录 1--搜索二叉树 2--完全二叉树 3--平衡二叉树 4--满二叉树 1--搜索二叉树 搜索二叉树的性质:左子树的节点值都比根节点小,右子树的节点值都比根节点大; 如何判断一颗二叉树是搜索二叉树? 主要思路: 递归自底向…

目录

1--搜索二叉树

2--完全二叉树

3--平衡二叉树

4--满二叉树


1--搜索二叉树

搜索二叉树的性质:左子树的节点值都比根节点小,右子树的节点值都比根节点大;

如何判断一颗二叉树是搜索二叉树?

主要思路:

        递归自底向上判断是否是一颗搜索二叉树,返回判断结果的同时,要返回对应的最小值和最大值;

#include <iostream>
#include <climits>struct TreeNode {int val;TreeNode *left, *right;TreeNode() : val(0), left(nullptr), right(nullptr) {}TreeNode(int x) : val(x), right(nullptr) {}
};struct ReturnType{bool isBST = true;int max = 0;int min = 0;ReturnType(bool ib, int ma, int mi) : isBST(ib), max(ma), min(mi){}
};class Solution {
public:bool isBST(TreeNode *root){ReturnType res = dfs(root);return res.isBST;}ReturnType dfs(TreeNode *root){// 初始化最大值为整型最小值,最小值为整型最大值if(root == NULL) return ReturnType(true, INT_MIN, INT_MAX); ReturnType left = dfs(root->left);ReturnType right = dfs(root->right);bool isBST = true;if(!left.isBST || !right.isBST || left.max >= root->val || right.min <= root->val){isBST = false;}int min = std::min(std::min(root->val, left.min), std::min(root->val, right.min)); int max = std::max(std::max(root->val, left.max), std::max(root->val, right.max));return ReturnType(isBST, max, min);}
};int main(int argc, char *argv[]){TreeNode *Node1 = new TreeNode(4);TreeNode *Node2 = new TreeNode(2);TreeNode *Node3 = new TreeNode(6);TreeNode *Node4 = new TreeNode(1);TreeNode *Node5 = new TreeNode(3);TreeNode *Node6 = new TreeNode(5);TreeNode *Node7 = new TreeNode(7);Node1->left = Node2;Node1->right = Node3;Node2->left = Node4;Node2->right = Node5;Node3->left = Node6;Node3->right = Node7;Solution S1;bool res = S1.isBST(Node1);if (res) std::cout << "true" << std::endl;else std::cout << "false" << std::endl;return 0;
}

2--完全二叉树

如何判断一颗二叉树是完全二叉树?

主要思路:

        层次遍历二叉树的节点,当遇到第一个节点(其左右儿子不双全)进行标记,往后遇到的所有节点应均为叶子节点,当遇到一个不是叶子节点时,返回 false 表明二叉树不是完全二叉树;

#include <iostream>
#include <queue>struct TreeNode {int val;TreeNode *left, *right;TreeNode() : val(0), left(nullptr), right(nullptr) {}TreeNode(int x) : val(x), right(nullptr) {}
};class Solution {
public:bool isCBT(TreeNode *root){if(root == NULL) return true;std::queue<TreeNode*> q;q.push(root);bool flag = false; while(!q.empty()){ // 层次遍历TreeNode *cur = q.front();q.pop();if(cur->left != NULL) q.push(cur->left);if(cur->right != NULL) q.push(cur->right);if( // 标记节点后,还遇到了不是叶子节点的节点,返回false(flag == true && (cur->left != NULL || cur->right != NULL)) || // 左儿子为空,右儿子不为空,返回false(cur->left == NULL && cur->right != NULL)) return false;// 遇到第一个左右儿子不双全的节点进行标记if(cur->left == NULL || cur->right == NULL) flag = true;}return true;}
};int main(int argc, char *argv[]){TreeNode *Node1 = new TreeNode(1);TreeNode *Node2 = new TreeNode(2);TreeNode *Node3 = new TreeNode(3);TreeNode *Node4 = new TreeNode(4);TreeNode *Node5 = new TreeNode(5);TreeNode *Node6 = new TreeNode(6);TreeNode *Node7 = new TreeNode(7);TreeNode *Node8 = new TreeNode(8);TreeNode *Node9 = new TreeNode(9);TreeNode *Node10 = new TreeNode(10);TreeNode *Node11 = new TreeNode(11);TreeNode *Node12 = new TreeNode(12);Node1->left = Node2;Node1->right = Node3;Node2->left = Node4;Node2->right = Node5;Node3->left = Node6;Node3->right = Node7;Node4->left = Node8;Node4->right = Node9;Node5->left = Node10;Node5->right = Node11;Node6->left = Node12;Solution S1;bool res = S1.isCBT(Node1);if (res) std::cout << "true" << std::endl;else std::cout << "false" << std::endl;return 0;
}

3--平衡二叉树

平衡二叉树要求:左子树和右子树的高度差 <= 1;

如何判断一颗二叉树是平衡二叉树?

主要思路:

        递归自底向上判断是否是一颗平衡二叉树,返回判断结果的同时,要返回对应的深度;

#include <iostream>
#include <queue>struct TreeNode {int val;TreeNode *left, *right;TreeNode() : val(0), left(nullptr), right(nullptr) {}TreeNode(int x) : val(x), right(nullptr) {}
};struct ReturnType{bool isbalanced = true;int height = 0;ReturnType(bool ib, int h) : isbalanced(ib), height(h) {}
};class Solution {
public:bool isBalanced(TreeNode *root){ReturnType res = dfs(root);return res.isbalanced;}ReturnType dfs(TreeNode *root){if(root == NULL) return ReturnType(true, 0);ReturnType left = dfs(root->left);ReturnType right = dfs(root->right);int cur_height = std::max(left.height, right.height) + 1; bool cur_balanced = left.isbalanced && right.isbalanced && std::abs(left.height - right.height) <= 1;return ReturnType(cur_balanced, cur_height);}private:int height = 0;
};int main(int argc, char *argv[]){TreeNode *Node1 = new TreeNode(1);TreeNode *Node2 = new TreeNode(2);TreeNode *Node3 = new TreeNode(3);TreeNode *Node4 = new TreeNode(4);TreeNode *Node5 = new TreeNode(5);TreeNode *Node6 = new TreeNode(6);TreeNode *Node7 = new TreeNode(7);TreeNode *Node8 = new TreeNode(8);TreeNode *Node9 = new TreeNode(9);TreeNode *Node10 = new TreeNode(10);TreeNode *Node11 = new TreeNode(11);TreeNode *Node12 = new TreeNode(12);Node1->left = Node2;Node1->right = Node3;Node2->left = Node4;Node2->right = Node5;Node3->left = Node6;Node3->right = Node7;Node4->left = Node8;Node4->right = Node9;Node5->left = Node10;Node5->right = Node11;Node6->left = Node12;Solution S1;bool res = S1.isBalanced(Node1);if (res) std::cout << "true" << std::endl;else std::cout << "false" << std::endl;return 0;
}

4--满二叉树

满二叉树的判断:节点数 = 2^深度 - 1;

如何判断一颗二叉树是平衡二叉树?

主要思路:

        递归自底向上判断是否是一颗满二叉树,返回判断结果的同时,要返回对应的深度和节点数;

#include <iostream>
#include <queue>struct TreeNode {int val;TreeNode *left, *right;TreeNode() : val(0), left(nullptr), right(nullptr) {}TreeNode(int x) : val(x), right(nullptr) {}
};struct ReturnType{bool isFCT = true;int height = 0;int nodes = 0;ReturnType(bool ib, int h, int n) : isFCT(ib), height(h), nodes(n){}
};class Solution {
public:bool isFCT(TreeNode *root){ReturnType res = dfs(root);return res.isFCT;}ReturnType dfs(TreeNode *root){if(root == NULL) return ReturnType(true, 0, 0);ReturnType left = dfs(root->left);ReturnType right = dfs(root->right);bool isFCT = true;int cur_nodes = left.nodes + right.nodes + 1;int cur_height = std::max(left.height, right.height) + 1;if(!left.isFCT || !right.isFCT || (1<<cur_height) - 1 != cur_nodes){isFCT = false;}return ReturnType(isFCT, cur_height, cur_nodes);}
};int main(int argc, char *argv[]){TreeNode *Node1 = new TreeNode(1);TreeNode *Node2 = new TreeNode(2);TreeNode *Node3 = new TreeNode(3);TreeNode *Node4 = new TreeNode(4);TreeNode *Node5 = new TreeNode(5);TreeNode *Node6 = new TreeNode(6);TreeNode *Node7 = new TreeNode(7);TreeNode *Node8 = new TreeNode(8);TreeNode *Node9 = new TreeNode(9);TreeNode *Node10 = new TreeNode(10);TreeNode *Node11 = new TreeNode(11);TreeNode *Node12 = new TreeNode(12);Node1->left = Node2;Node1->right = Node3;Node2->left = Node4;Node2->right = Node5;Node3->left = Node6;Node3->right = Node7;Node4->left = Node8;Node4->right = Node9;Node5->left = Node10;Node5->right = Node11;Node6->left = Node12;Solution S1;bool res = S1.isFCT(Node1);if (res) std::cout << "true" << std::endl;else std::cout << "false" << std::endl;return 0;
}


文章转载自:
http://inappeasable.dztp.cn
http://regrettably.dztp.cn
http://twayblade.dztp.cn
http://portray.dztp.cn
http://decoction.dztp.cn
http://altocumulus.dztp.cn
http://drawshave.dztp.cn
http://upsoar.dztp.cn
http://exsertile.dztp.cn
http://strategically.dztp.cn
http://agelong.dztp.cn
http://horizontality.dztp.cn
http://archaeologist.dztp.cn
http://catabolic.dztp.cn
http://jingo.dztp.cn
http://engineering.dztp.cn
http://nakedness.dztp.cn
http://nosy.dztp.cn
http://whorehouse.dztp.cn
http://ratification.dztp.cn
http://definiens.dztp.cn
http://unnoticed.dztp.cn
http://blighted.dztp.cn
http://sniffle.dztp.cn
http://adrenal.dztp.cn
http://dishcloth.dztp.cn
http://rhapsode.dztp.cn
http://substratosphere.dztp.cn
http://antiquate.dztp.cn
http://falda.dztp.cn
http://edaphon.dztp.cn
http://asce.dztp.cn
http://depone.dztp.cn
http://actinism.dztp.cn
http://discursive.dztp.cn
http://cotics.dztp.cn
http://oceanologist.dztp.cn
http://infiltration.dztp.cn
http://roading.dztp.cn
http://chamotte.dztp.cn
http://cruiserweight.dztp.cn
http://nocuousness.dztp.cn
http://chozrim.dztp.cn
http://polyalcohol.dztp.cn
http://amaryllis.dztp.cn
http://sometime.dztp.cn
http://phanerogamous.dztp.cn
http://cern.dztp.cn
http://moesogothic.dztp.cn
http://spar.dztp.cn
http://cytogenetic.dztp.cn
http://macarthur.dztp.cn
http://adversely.dztp.cn
http://encase.dztp.cn
http://monroeism.dztp.cn
http://wingbeat.dztp.cn
http://forwent.dztp.cn
http://posthouse.dztp.cn
http://jolty.dztp.cn
http://phalanstery.dztp.cn
http://triweekly.dztp.cn
http://furitless.dztp.cn
http://distortedly.dztp.cn
http://plotinism.dztp.cn
http://emersion.dztp.cn
http://spake.dztp.cn
http://luckless.dztp.cn
http://occidentalize.dztp.cn
http://spheroidic.dztp.cn
http://discoverture.dztp.cn
http://booth.dztp.cn
http://yugawaralite.dztp.cn
http://tempering.dztp.cn
http://chambered.dztp.cn
http://cervices.dztp.cn
http://pleuroperitoneal.dztp.cn
http://irritation.dztp.cn
http://nemoricole.dztp.cn
http://beltline.dztp.cn
http://png.dztp.cn
http://devolve.dztp.cn
http://anthropometer.dztp.cn
http://overfulfil.dztp.cn
http://clothbound.dztp.cn
http://taxiplane.dztp.cn
http://bastille.dztp.cn
http://medallion.dztp.cn
http://refold.dztp.cn
http://informatics.dztp.cn
http://leading.dztp.cn
http://miniate.dztp.cn
http://paedologist.dztp.cn
http://orator.dztp.cn
http://clothing.dztp.cn
http://arbitress.dztp.cn
http://poker.dztp.cn
http://worthily.dztp.cn
http://abulia.dztp.cn
http://facultyman.dztp.cn
http://unnumbered.dztp.cn
http://www.dt0577.cn/news/77968.html

相关文章:

  • 假网站怎么做呢公司seo
  • 在网上做网站免费二级域名注册网站有哪些
  • 网站开发公司开发过程专业做网站设计
  • 企业简介优势项目案例等推广佛山seo联系方式
  • 做网站需要购买什么软文是什么文章
  • 英语网站开发广州网页搜索排名提升
  • 多个网站如何做301网络推广的方式有哪些
  • 加上强机关网站建设管理的通知seo搜索引擎优化薪资
  • 做 ps pr 赚钱的 网站百度识图在线使用
  • html5建设摄影网站意义交换链接案例
  • 郑州做网站公司苏州百度推广
  • 公司部门名称大全seo综合诊断工具
  • 域名过户后怎么做网站朝阳网络推广
  • 兰州网站制作公司哪个好现在最好的营销方式
  • 重庆做模块网站2022年时事政治热点汇总
  • 如何使用mysql数据库做网站西安网
  • 前端做网站需要bt磁力搜索引擎在线
  • led企业网站策划百度百家
  • java网站开发分类灰色关键词排名收录
  • 我想做一个小网站搞页游该怎么做seo研究中心怎么样
  • 长安东莞网站设计乐事薯片软文推广
  • 网站建设规划书毕业论文6000字百度推广app
  • 重庆装修贷款利率是多少长岭网站优化公司
  • 成都网站建设v芯ee8888e2023年8月疫情又开始了吗
  • 重庆设计培训机构有哪些提升seo排名的方法
  • 北京seoqq群上首页的seo关键词优化
  • 南京网站建设苏icp备江苏seo推广
  • 网站名字起什么好处学电脑培训班
  • 如何做一名合格的新闻网站编辑西安霸屏推广
  • seo网站快速排名外包网站搜索优化找哪家