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

潍坊做网站个人工作室百度2019旧版本下载

潍坊做网站个人工作室,百度2019旧版本下载,重庆做网站的,做网站必须学php吗目录 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://www.khdw.cn/news/38362.html

相关文章:

  • 哈尔滨网站开发公司电话站长查询域名
  • 网站不需要什么备案上海网站排名推广
  • 网站备案编号瑞金网络推广
  • 深圳 网站制作seo网站诊断价格
  • 昆明网站seo诊断上海网络推广营销策划方案
  • 自适应网站开发文字大小如何处理b2b外链
  • 一个专门做恐怖片的网站天津外贸seo推广
  • 网站建设综合实训日志推广方案范例
  • wordpress网站备份恢复优化营商环境条例全文
  • c2c网站建设策划书培训网址大全
  • 学校网站建设主体长沙百度首页优化排名
  • 自适应网站开发框架搜索点击软件
  • 网站中的分享怎么做在线制作网站免费
  • 爱站网主要功能如何申请网站域名流程
  • dede网站根目录标签品牌推广宣传词
  • 上海定制网站开发网站制作策划
  • wordpress手机站模板抖音搜索优化
  • 企业网站建设费用定金怎么做账企业网络推广平台
  • 大型医疗网站建设学网络营销
  • 常州网站推广招聘注册推广赚钱一个10元
  • 萝岗网站开发营销外包
  • 网站建设需要经历什么步骤软文批发网
  • 潍坊网站制作价格各大网站提交入口
  • 百度搜索公司网站展现图片广州白云区今天的消息
  • wordpress调用新版媒体库网站推广优化怎样
  • 家居企业网站建设流程免费网站站长查询
  • 行业协会网站模板哪里有免费的网站推广软件
  • 快速搭建网站信息库seo线下培训课程
  • 建立网站需要多少人环球网广东疫情最新消息
  • 大坪网站建设游戏优化大师下载安装