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

江苏建站速度忿免费发帖推广平台

江苏建站速度忿,免费发帖推广平台,网站总体设计怎么写,酒店网站建设报告书文本目录: ❄️一、习题一(检查两颗树是否相同): ▶ 思路: ▶ 代码: ❄️二、习题二(另一棵树的子树): ▶ 思路: ▶ 代码: ❄️三、习题三(翻转二叉树): ▶ 思路: ▶ 代…

文本目录:

❄️一、习题一(检查两颗树是否相同):

   ▶ 思路:

   ▶ 代码:

 ❄️二、习题二(另一棵树的子树):

   ▶ 思路:

   ▶ 代码:

 ❄️三、习题三(翻转二叉树):

   ▶ 思路:

    ▶ 代码:

❄️四、习题四(对称二叉树):

    ▶ 思路:

    ▶ 代码:

❄️五、习题五(平衡二叉树):

    ▶ 思路:

     ▶ 代码:

 ❄️六、习题六(二叉树的构建和遍历):

    ▶ 思路:

      ▶ 代码:

 ❄️七、总结:


❄️一、习题一(检查两颗树是否相同):

          ☑ 题的链接:

                     相同的树


   ▶ 思路:

      这个题呢我们需要判断 两个二叉树的结构是否相同,并且节点的值是否相同,所以呢,我们遍历二叉树来看看 两个二叉树的所对应的结构和节点数值是否相同。

     我们在结构上呢,我们有两种情况:

第一种:p 这个二叉树对应的节点不为空,q 这个二叉树对应的节点为空。

第二种:p 这个二叉树对应的节点为空,q 这个二叉树对应的节点不为空。

   当我们这两个二叉树所对应的节点结构是都为空,或这都不为空的时候呢,就是我们的结构是一样的,之后我们再来判断这两个节点所对应的值是否相同。

    所以呢我们是先来判断结构是否相同,之后判断节点的值是否相同。 这里呢,我们也使用的是递归方法。我们来看看思路图:

   ▶ 代码

 接下来我们来看看代码的编写:

public boolean isSameTree(TreeNode p, TreeNode q) {//先判断p和q的结构if (p != null && q == null || p == null && q != null) {//结构出现错误return false;}//可能是因为都为null或者都不为空//都为空下: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);//我们递归正确返回的是真}

 ❄️二、习题二(另一棵树的子树):

          ☑ 题的链接:

                   另一棵树的子树


   ▶ 思路:

       我们的这道题呢,和我们的上面的代码是有关系的,我们这到题呢也是需要对于节点的结构和对应的节点值进行比较,当我们在 root 里面遍历当我们的遍历出和我们的 subRoot 这个根结点相同的时候呢,我们进行 root 和 subRoot 共同遍历在我们没有比较出和 subRoot 根结点相同之前呢,我们只有 root 遍历

判断子树和当前的 root 的左子树一样?

判断子树和当前的 root 的右子树一样?

   ▶ 代码

我们来看看代码是如何实现的: 

public boolean isSameTree(TreeNode p, TreeNode q) {//先判断p和q的结构if (p != null && q == null || p == null && q != null) {//结构出现错误return false;}//可能是因为都为null或者都不为空//都为空下: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);//我们递归正确返回的是真}//另一棵树的子树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 TreeNode invertTree(TreeNode root) {if (root == null) {return null;}//进行当前根的左子树和右子树的替换TreeNode cur = root.left;root.left = root.right;root.right = cur;//到根的左子树和右子树去替换//这里用遍历invertTree(root.left);invertTree(root.right);return root;}

❄️四、习题四(对称二叉树):

          ☑ 题的链接:

                      对称二叉树


    ▶ 思路:

    我们这道题呢,和我们判断 两棵树是否相等 是相类似的,我们什么情况下我们的二叉树是对称的呢?在我们二叉树的 左右子树是在结构上和对应节点的值是相等的时候就是相等的,这时候呢,我们的二叉树就是对称二叉树。对称二叉树要注意的是:我们的左子树的节点应该和右子树的是相等的,而不是左子树节点和左子树节点相等。

     我们先来看看不为对称二叉树的情况:

  正确的情况图: 所以我们要判断:

1、根的左子树是否为空

2、根的右子树是否为空

3、左子树的节点的值和右子树的节点的值是否相等

这里我们要注意的是:

   我们递归的时候呢,我们要判断 左子树的左子树和右子树的右子树左子树的右子树和右子树的左子树

    ▶ 代码

我们来看看代码:

public boolean isSymmetricChild(TreeNode leftTree,TreeNode rightTree) {//结构不一样的情况下if (leftTree != null && rightTree == null|| leftTree == null && rightTree != null) {return false;}//在结构一样的情况下左右子树都等于空if (leftTree == null && rightTree == null) {return true;}//在结构一样的情况下左右子树都不等于空//我们来判断左值和右值是否相等if (leftTree.val != rightTree.val) {return false;}//之后我们来遍历左子树的子树,右子树的右子树,再次判断是否结构相等和值是否相等return isSymmetricChild(leftTree.left,rightTree.right) &&isSymmetricChild(leftTree.right,rightTree.left);}public boolean isSymmetric(TreeNode root) {if (root == null) {return false;}return isSymmetricChild(root.left,root.right);}

❄️五、习题五(平衡二叉树):

          ☑ 题的链接:

                      平衡二叉树


    ▶ 思路:

     如果我们想要判断是否是平衡二叉树呢,我们的左子树的高度和有字数的高度用需要 < 2,我们不只是需要判断 根结点的高度差是否 < 2,我们需要判断每一颗子树的高度差是否 < 2,如果大于 2 那么就不是平衡二叉树了

      这样理解之后呢,就是非常简单的了,我们需要使用我们上个博客写的求高度的方法,用来求高度,去求高度差,我们不只是需要判断根节点还需要判断根节点的左子树和根节点的右子树的高度差是否 < 2

     ▶ 代码

 我们来看看这道题的代码如何编写的:


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;}//平衡二叉树public boolean isBalanced(TreeNode root) {if (root == null) {return true;}int leftHeight = getHeight(root.left);int rightHeight = getHeight(root.right);//Math.abs是取绝对值return Math.abs(leftHeight - rightHeight) < 2 && isBalanced(root.left)&& isBalanced(root.right);}

 ❄️六、习题六(二叉树的构建和遍历):

              ☑ 题的链接:
                             二叉树的构建和遍历


    ▶ 思路:

      我们呢这道题同样使用递归的思想来编写代码,这个呢是当我们在遇到 ‘#’ 的时候是为空的,我们按照前序遍历来把二叉树进行创建,第一个字符为根节点,之后我们就按照前序遍历的思想来进行编写代码,我们需要一个下标来遍历字符串,当遇到字符时候放入二叉树中,当为 ‘#’ 时呢,节点为空,就可以了。所以我们的思路就是:

1、先创建根节点

2、创建左子树

3、创建右子树

 

这个呢就是这道题的思路了,我们来看看这个代码是如何编写的: 

      ▶ 代码

import java.util.Scanner;
class TreeNode {public char val;public TreeNode left;public TreeNode right;public TreeNode(char val) {this.val = val;}
}public class Main {public static int i = 0;public static TreeNode creatTree(String str) {TreeNode root = null;if (str.charAt(i) != '#') {root = new TreeNode(str.charAt(i));i++;root.left = creatTree(str);root.right = creatTree(str);} else {i++;}return root;}public static void inOrder(TreeNode root) {if (root == null) {return;}inOrder(root.left);System.out.print(root.val + " ");inOrder(root.right);}public static void main(String[] args) {Scanner in = new Scanner(System.in);while (in.hasNextLine()) {String str = in.nextLine();TreeNode root = creatTree(str);inOrder(root);}}
}

OK,我们这道题到这里就结束了。 


 ❄️七、总结:

     OK,我们这次关于二叉树的习题的练习就到这里就结束了,我们在做这种二叉树的题的时候时刻都不要忘记递归的思想。我们呢下篇博客呢还是介绍关于我们二叉树的练习题了,让我们尽情期待吧!!!拜拜~~~

 

http://www.hkea.cn/news/586239/

相关文章:

  • 广州网站优化推广公司网站优化排名资源
  • 济南网站建设大标网络企业seo服务
  • net域名大网站东莞关键词自动排名
  • 做企业平台的网站怎样进行网络营销吸引顾客
  • 天河网站 建设seo信科分公司谷歌搜索引擎网址
  • 西安网站建设招骋外贸如何推广
  • 网站改版降权武汉seo排名公司
  • 南京哪家公司做企业网站 做得比较好百度seo怎么优化
  • 白云做网站SEO市场营销策略有哪些
  • 做网站用lunx怎么建立一个网站
  • 电商网站开发定制百度推广优化排名
  • 网站备案 法人身份证cba最新消息
  • 做公司网站需要什么手续厦门seo网站优化
  • 合肥本地网站网站关键词公司
  • 武汉电商网站建设seopc流量排行榜企业
  • 如何给给公司建立网站seo商学院
  • 让建站公司做网站需要什么最新腾讯新闻
  • 网站开发的意义搜索关键词排名优化
  • 如何建一个论坛网站怎么做营销推广
  • 元凤建盏简介青岛seo
  • 营销型网站套餐cps游戏推广平台
  • 哪些网站做ip向小说网络营销公司经营范围
  • 蜜芽免费网站域名关键词网站排名查询
  • 网站备案要到哪里下载关键词在线挖掘网站
  • 跨境电商开发seo的优化策略有哪些
  • 做网站的费用 优帮云百度广告代运营
  • wordpress儿童卡通主题兰州网站seo服务
  • 8网站建设做网站sem优化师是什么意思
  • 设计师个人网站怎么做百度优化培训
  • 广东海外建设监理有限公司官方网站2345网址导航是病毒吗