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

java 剑指offer之[数据结构 困难]JZ58 对称的二叉树

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

java 剑指offer之[数据结构 困难]JZ58 对称的二叉树

题目的链接在这里:https://www.nowcoder.com/practice/ff05d44dfdb04e1d83bdbdab320efbcb

目录
  • 题目大意
  • 一、示意图
  • 二、解题思路
    • 错误示范
    • 递归


题目大意 请实现一个函数,用来判断一棵二叉树是不是对称的。注意,如果一个二叉树同此二叉树的镜像是同样的,定义其为对称的。
一、示意图

二、解题思路
错误示范和递归
错误示范

代码如下:

import java.util.*;
public class Solution {
 boolean isSymmetrical(TreeNode pRoot) {
        //直接中序遍历 然后判断就行了
        //或者层次遍历 先判断一层的长度是不是2的倍数 然后再判断这几个是不是对称的、然后他们对称的话 利用那个数据结构 不能存一样的 应该就大小变成了size的一半?

        //先进行一些边界判断
        if(pRoot==null)
            return true;
      if(pRoot.left==null&&pRoot.right==null)
            return true;
        //需要排除第一个
        if((pRoot.left==null&&pRoot.right!=null)||(pRoot.right==null&&pRoot.left!=null)){
            return false;
        }
        //然后之后的pRoot就是既有左子树 又有右子树了
        Queue queue=new linkedList<>();
        queue.add(pRoot.left);
        queue.add(pRoot.right);
        int size;
        //使用这个来存储当前层的值
       HashSet hashSet =new HashSet<>();
        //然后开始判断
        while (!queue.isEmpty()){
            //每次都要清空一下 没有这个判断会报错的
            if(!hashSet.isEmpty()){
                hashSet.clear();
            }
            size=queue.size();
            //开始判断
            if(size%2!=0){
                //说明是单数
                return false;
            }
            //然后开始判断
            for(int i=0;i 
递归 

代码如下:

import java.util.*;
public class Solution {
 boolean isSymmetrical(TreeNode pRoot) {
        //直接中序遍历 然后判断就行了
        //或者层次遍历 先判断一层的长度是不是2的倍数 然后再判断这几个是不是对称的、然后他们对称的话 利用那个数据结构 不能存一样的 应该就大小变成了size的一半?

        //先进行一些边界判断
        if(pRoot==null)
            return true;
        if(pRoot.left==null&&pRoot.right==null)
            return true;
        //需要排除第一个
        if((pRoot.left==null&&pRoot.right!=null)||(pRoot.right==null&&pRoot.left!=null)){
            return false;
        }
       //那 中序后序这些遍历 也都实现不了这个 {5,5,5,5,#,#,5,5,#,5}
        //使用递归的方法
        return comBa(pRoot.left,pRoot.right);
}

    private boolean comBa(TreeNode left, TreeNode right) {
        if(left==null){
            //那就判断他右边存不存在
            return right==null;
        }
        //然后就是说明他左边是存在的
        if(right==null)
            return false;
        //然后就是判断这两个一不一样
        if(left.val!=right.val)
            return false;
        
        //然后就是这个位置是相同的 开始递归其他位置
        return comBa(left.left,right.right)&&comBa(left.right,right.left);
    }
}

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

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

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