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

网站建设在实际工作中的意义Wordpress图文博客插件

网站建设在实际工作中的意义,Wordpress图文博客插件,阳西网站seo,凡科建站视频教程💎 欢迎大家互三:2的n次方_ 1. 相同的树 100. 相同的树 同时遍历两棵树 判断结构相同:也就是在遍历的过程中,如果有一个节点为null,另一棵树的节点不为null,那么结构就不相同 判断值相同:只需…

 

💎 欢迎大家互三:2的n次方_

 

在这里插入图片描述

1. 相同的树

100. 相同的树

同时遍历两棵树 

 判断结构相同:也就是在遍历的过程中,如果有一个节点为null,另一棵树的节点不为null,那么结构就不相同

判断值相同:只需要在遍历的过程中判断当前节点的val值是否相同

class Solution {public boolean isSameTree(TreeNode p, TreeNode q) {//判断结构if ((p == null && q != null) || (p != null && q == null))return false;if (p == null && q == null)return true;//判断值if (p.val != q.val)return false;//遍历判断左子树和右子树return isSameTree(p.left, q.left) && isSameTree(p.right, q.right);}
}

 2. 另一棵树的子树

 572. 另一棵树的子树

这里给出的子树定义是需要包括某个节点和这个节点所有后代节点,少一个都不行

 下面这两种就可以看作是子树

 思路:

1.判断当前子树是否和根节点一样

2.判断子树是否和当前root的左子树一样

3.判断子树是否和当前root的右子树一样

判断两棵树是否一样在上一题已经写好了,可以直接拿来用

class Solution {public boolean isSubtree(TreeNode root, TreeNode subRoot) {if(root == null) return false;if(isSameTree(root,subRoot)) return true;if(isSubtree(root.left,subRoot)) return true;if(isSubtree(root.right,subRoot)) return true;return false;}public boolean isSameTree(TreeNode p, TreeNode q) {if ((p == null && q != null) || (p != null && q == null))return false;if (p == null && q == null)return true;if (p.val != q.val)return false;return isSameTree(p.left, q.left) && isSameTree(p.right, q.right);}
}

 3. 翻转二叉树

226. 翻转二叉树

 这道题只需要在遍历的同时把当前节点的左子树和右子树进行交换即可

class Solution {public TreeNode invertTree(TreeNode root) {if (root == null)return null;if (root.right == null && root.left == null)return root;TreeNode tmp = root.left;root.left = root.right;root.right = tmp;invertTree(root.left);invertTree(root.right);return root;}
}

4.  对称二叉树

101. 对称二叉树

 思路:对称二叉树其实就是左子树的左子树和右子树的右子树,左子树的右子树和右子树的左子树的值相同,和之前判断相同的树类似,先比较结构,如果结构不一样肯定不是对称的,接着再判断值,通过递归实现左子树和右子树的判断

    public boolean isSymmetric(TreeNode root) {if (root == null)return true;return isSymmetricChild(root.left, root.right);}public boolean isSymmetricChild(TreeNode root1, TreeNode root2) {//判断结构相同if (root1 != null && root2 == null || root1 == null && root2 != null) {return false;}if (root1 == null && root2 == null) {return true;}//判断值相同if(root1.val != root2.val){return false;}//左子树的左子树和右子树的右子树,左子树的右子树和右子树的左子树return isSymmetricChild(root1.left,root2.right) && isSymmetricChild(root1.right,root2.left);}

5.  平衡二叉树

110. 平衡二叉树

平衡二叉树是指任意节点的两个子树的高度差不超过1的二叉树 

 思路:遍历这棵树的每一个节点,求每一个节点的左子树和右子树,判断高度是否相差大于1,并且左子树和右子树也要是平衡二叉树

class Solution {public boolean isBalanced(TreeNode root) {if(root == null) return true;int res = getHeight(root.left) - getHeight(root.right);if(res <= -2 || res >= 2){return false;}return isBalanced(root.left)&&isBalanced(root.right);}//求树的高度public int getHeight(TreeNode root) {if (root == null)return 0;int leftHeight = getHeight(root.left);int rightHeight = getHeight(root.right);return (leftHeight > rightHeight) ? leftHeight + 1 : rightHeight + 1;}
}

 这种方法简单直观,但是时间复杂度是O(n²)的,因为每次判断一个节点时,都要判断一次子树,重复计算,性能不高,接下来优化一下

class Solution {public boolean isBalanced(TreeNode root) {if(root == null) return true;//如果返回-1表示不是平衡二叉树return getHeight(root) >= 0;}public int getHeight(TreeNode root) {if (root == null)return 0;int leftHeight = getHeight(root.left);//如果拿到的还是-1,表示已经不是平衡二叉树,返回-1if(leftHeight < 0){return -1;}int rightHeight = getHeight(root.right);if(rightHeight >= 0 && Math.abs(leftHeight - rightHeight) <= 1){return Math.max(leftHeight,rightHeight) + 1;}else{return -1;}}
}

 上面优化的是如果已经判断出不是平衡二叉树,就返回-1,不用再进行其他判断了

6. KY11 二叉树遍历

KY11 二叉树遍历

 例如,根据题目中输入的字符串可以构建出这样一棵二叉树

 那么怎么去实现呢

首先就是遍历字符串,遇到 "#" 就跳过,不是的话就创建相应的节点,并通过递归的形式,进行左右子节点的连接

class TreeNode {public char val;public TreeNode left;public TreeNode right;public TreeNode(char val) {this.val = val;}
}public class Main {public static void main(String[] args) {Main main = new Main();Scanner in = new Scanner(System.in);// 注意 hasNext 和 hasNextLine 的区别while (in.hasNextLine()) { // 注意 while 处理多个 caseString str = in.nextLine();TreeNode root = main.createTree(str);main.inOrder(root);}}public int i = 0;//在递归的过程中连接节点public TreeNode createTree(String str) {TreeNode root = null;if (str.charAt(i) != '#') {root = new TreeNode(str.charAt(i));i++;root.left = createTree(str);root.right = createTree(str);} else {i++;}return root;}//遍历打印public void inOrder(TreeNode root) {if (root == null) return;inOrder(root.left);System.out.print(root.val + " ");inOrder(root.right);}
}

 7. 二叉树的最近公共祖先

236. 二叉树的最近公共祖先

可以分为下面几种情况 :

 如果刚开始就是root是p或者q,直接返回root,不是的话就去左右子树里边找,首先就是p,q在两边的情况,那么就是左右子树的返回值都不为空,根节点root就是最近公共祖先,然后就是p,q在同一边的情况,这个又可以分为两种情况,首先就是p,q不在同一深度,此时就又回到了刚开始的情况,新的根节点就是最近公共祖先,然后就是p,q在通一深度的情况,此时,新的root还是最近公共祖先

class Solution {public TreeNode lowestCommonAncestor(TreeNode root, TreeNode p, TreeNode q) {if (root == null)return null;if (root == p || root == q) {return root;}TreeNode leftNode = lowestCommonAncestor(root.left, p, q);TreeNode rightNode = lowestCommonAncestor(root.right, p, q);if(rightNode != null && leftNode != null){return root;}else if(leftNode!=null){return leftNode;}else{return rightNode;}}
}

 除了这种方法,还有另外一种思路,可以看作链表的交叉来做

在这里插入图片描述

http://www.yayakq.cn/news/428871/

相关文章:

  • 天津企业免费建站wordpress媒体库空白
  • 学习建设网站难么网站开发实战答案
  • 烟台专门做网站的宁波seo推荐优化
  • 免费美食网站源码二手房网站谁做的更好
  • 手机网站建设语言电脑培训班零基础
  • 做网站需要公司我的WordPress网站
  • 网站改版重新备案惠州seo排名优化
  • 上海企业网站建设哪家好视频模板套用免费
  • 怎么做购物网站长沙旅游网站制作
  • 昆明做网站价格沙坪坝网站建设
  • 网站有多难做简要说明网站建设的步骤
  • 做网站要注册商标第几类网站的建设需要数据库
  • 广州建站培训学校怎么建网站不用买空间
  • 电子商务网站建设与维护案例做设计网站赚钱吗
  • 北大学风建设网站网站开发实用技术第2版课后答案
  • 网站怎么添加代码图片网站收录
  • 建设网站宝安区文昌建设局网站
  • 成交型网站建设公司网站的建设方法有哪些
  • 360建站工具贷款网站建设
  • 华建设计网站手机app下载官方免费下载安装
  • 内蒙古自治区工程建设网站app软件开发学什么专业
  • html5网站欣赏 国内导航站wordpress
  • 网站怎么推广引流wordpress 导出export.php
  • 建站最少需要多少钱用cms创建自己带数据库的网站和在本机搭建网站运行平台的心得体会
  • 织梦源码怎样做单页网站自建网站如何备案
  • 适合女生做的网站门户网站安全建设
  • 网站建设推广方案书注册网址的网站
  • 52做网站沈阳网站建设小志
  • 华为网站建站鲜花网站建设源代码
  • 安庆市建设办事处网站thinkphp3.2 企业网站源码