栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

数据结构(day10)

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

数据结构(day10)

1.剑指 Offer 27. 二叉树的镜像

思路分析

根据题意输出它的镜像--镜像就是 左变成右  右变成左

这里就应该是使用递归回溯了

1.先用一个变量将当前节点的左子树保存起来

2当前节点的左子树 =.当前节点的右子树

 当前节点的右子树=变量存储

3.终止条件  当节点为空的时候 返回null

  

class Solution {
    public TreeNode mirrorTree(TreeNode root) {
       //终止条件
       if(root==null ) return null;
      //暂存节点的左子树
       TreeNode tem=root.left;
       //当前节点的左子树=当前节点的右子树
        root.left=mirrorTree(root.right);
       //当前节点的右子树=暂存的树
       root.right=mirrorTree(tem);
      //最后返回
       return root;
    }
}

2.剑指 Offer 28. 对称的二叉树

思路分析 

判断是否对称---即这颗二叉树与它的镜像一样  

我们都知道它的镜像就是  左变成右  右变成左---如果要使二叉树与它的镜像一样那么符合的条件是 :

   左子树的左节点等于右子树的右节点 并且 左子树的右节点等于右子树的左节点

这样就要使用递归回溯了

我们先找终止条件

   当左子树 或者右子树同时为空的时候 代表都递归完了 说明是对称的 返回真

  当左子树或者右子树有一个为空 代表只有一边递归完毕 返回假

  当左节点的值和右节点的值不相等的时候  就说明不是对称的  返回假

下面我们看代码

代码 
class Solution {
        
    public boolean isSymmetric(TreeNode root) {
       //当树为空 代表一定是对称的
       if(root==null) return true;
       return result (root.left,root.right);
    }
   
    public boolean result(TreeNode Left,TreeNode Right){
        //如果树的左和右子树都遍历都最后了  代表对称直接返回真
       if(Left==null&&Right==null) return true;
       //如果树的左子树或者右子树有一方遍历完毕了或者是左和右的值不相等  代表不对称返回假
       if(Left==null||Right==null||Left.val!=Right.val)  return false;
       //对称就是 左子树左跟右子树右相等  左子树的右跟右子树左相等
       return result(Left.left,Right.right)&&result(Left.right,Right.left);
    }
}

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/928420.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号