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

wap网站开发网页设计模板的结构

wap网站开发,网页设计模板的结构,做推广app赚钱的项目,门户网站功能模块想要精通算法和SQL的成长之路 - 验证二叉树 前言一. 验证二叉树1.1 并查集1.2 入度以及边数检查 前言 想要精通算法和SQL的成长之路 - 系列导航 并查集的运用 一. 验证二叉树 原题链接 思路如下#xff1a; 对于一颗二叉树#xff0c;我们需要做哪些校验#xff1f; 首先… 想要精通算法和SQL的成长之路 - 验证二叉树 前言一. 验证二叉树1.1 并查集1.2 入度以及边数检查 前言 想要精通算法和SQL的成长之路 - 系列导航 并查集的运用 一. 验证二叉树 原题链接 思路如下 对于一颗二叉树我们需要做哪些校验 首先这颗树不可以成环如图 其次这颗树的边数量应该等于 n -1。如下图就是错的 存在一个根节点它的入度为0其他所有的节点入度都不能够超过1。 那么针对以上几点我们可以分别来考虑。我们同时遍历一次左右节点数组。值不是-1的话说明该端连接的节点非空。 我们用一个int[] inDegree数组代表入度。对应值非-1的时候入度加1。用一个edges变量代表无向边数只要值非-1变数1。同时在遍历的过程中针对值非-1的情况我们将左右两端的节点进行合并。这一块使用并查集数据结构。最终合并完之后根节点数应该只有一个。 那么我们先写并查集的数据结构。 1.1 并查集 class UnionFind {private int[] parent;private int[] rank;private int sum;public UnionFind(int n) {rank new int[n];parent new int[n];// 初始化每个节点的根节点指向其本身for (int i 0; i n; i) {parent[i] i;}// 这里指的是根节点数量sum n;}public int find(int x) {while (x ! parent[x]) {x parent[x];}return x;}public void union(int x, int y) {int rootX find(x);int rootY find(y);// 如果两个元素的根节点一致不需要合并if (rootX rootY) {return;}// 如果根节点 rootX 的深度 rootY。if (rank[rootX] rank[rootY]) {// 那么将以rootY作为根节点的集合加入到rootX对应的集合当中rank[rootX] rank[rootY];// 同时改变rootY的根节点指向rootX。parent[rootY] rootX;} else {// 反之rank[rootY] rank[rootX];parent[rootX] rootY;}sum--;} }1.2 入度以及边数检查 public boolean validateBinaryTreeNodes(int n, int[] leftChild, int[] rightChild) {int[] inDegree new int[n];UnionFind unionFind new UnionFind(n);// 边数int edges 0;for (int i 0; i n; i) {int left leftChild[i];int right rightChild[i];if (left ! -1) {// 入度数1并且合并左右两端。同时边数1inDegree[left];unionFind.union(i, left);edges;}if (right ! -1) {inDegree[right];unionFind.union(i, right);edges;}}// 判断边数是否等于 n -1 if (edges ! n - 1) {return false;}// 判断入度数是否都是 1这里统计入度数 1的节点个数int count 0;for (int i 0; i n; i) {if (inDegree[i] 1) {count;}}// 不该存在入度数 1 的节点如果存在返回falseif (count 0) {return false;}// 判断是否存在环此时根节点只能存在一个return unionFind.sum 1; }最终代码如下 public class Test1361 {public boolean validateBinaryTreeNodes(int n, int[] leftChild, int[] rightChild) {int[] inDegree new int[n];UnionFind unionFind new UnionFind(n);int edges 0;for (int i 0; i n; i) {int left leftChild[i];int right rightChild[i];if (left ! -1) {inDegree[left];unionFind.union(i, left);edges;}if (right ! -1) {inDegree[right];unionFind.union(i, right);edges;}}// 判断边数是否相等if (edges ! n - 1) {return false;}// 判断入度数是否都是 1int count 0;for (int i 0; i n; i) {if (inDegree[i] 1) {count;}}if (count 0) {return false;}// 判断是否存在环return unionFind.sum 1;}class UnionFind {private int[] parent;private int[] rank;private int sum;public UnionFind(int n) {rank new int[n];parent new int[n];for (int i 0; i n; i) {parent[i] i;}sum n;}public int find(int x) {while (x ! parent[x]) {x parent[x];}return x;}public void union(int x, int y) {int rootX find(x);int rootY find(y);// 如果两个元素的根节点一致不需要合并if (rootX rootY) {return;}// 如果根节点 rootX 的深度 rootY。if (rank[rootX] rank[rootY]) {// 那么将以rootY作为根节点的集合加入到rootX对应的集合当中rank[rootX] rank[rootY];// 同时改变rootY的根节点指向rootX。parent[rootY] rootX;} else {// 反之rank[rootY] rank[rootX];parent[rootX] rootY;}sum--;}} }
http://www.w-s-a.com/news/622510/

相关文章:

  • 潍坊网站建设服务商做网站多久能盈利
  • 嘉定区做网站房产信息查询官网
  • 网站直播间 是怎么做的唐山论坛建站模板
  • 深圳洲聚网站建设wordpress 泛解析
  • 五金东莞网站建设技术支持wordpress 添加模板
  • 网站申请专利春节网页设计素材
  • 进网站备案md风格的wordpress主题
  • 如何建站网站十大免费建站app
  • 工作号做文案素材的网站晋城网站设计人
  • 建设部网站官网 施工许可怎样建网站 需要
  • 什么网站都能打开的浏览器同城小程序怎么推广
  • 在电脑上怎么做网站网址seo分析
  • 石家庄做网站网络公司电子商务营销推广
  • 网站开发 前端专做婚礼logo的网站
  • 同创企业网站建设拖拽建设网站源码
  • wordpress调用网站标题网站页面排版
  • 哈尔滨营销网站建设电子商城网站开发要多少钱
  • 免费织梦导航网站模板下载地址自己建站网站
  • 获取网站访客qq号码代码做抽奖网站违法吗
  • 湖南大型网站建设公司排名偷网站源码直接建站
  • 网站建设周期规划北京网站设计必看刻
  • 如何做自己的在线作品网站深圳网站设计公司的
  • 网站开发外包公司wordpress最简单模板
  • 湖南省建设人力资源网站wordpress主机pfthost
  • 淮安软件园哪家做网站各网站特点
  • 网站长尾关键词排名软件重庆荣昌网站建设
  • 建个商城网站多少钱茂名专业网站建设
  • 开通公司网站免费的网站app下载
  • 跨境电商网站模板wordpress壁纸
  • 国内做网站网站代理电子商务网站建设与维护概述