LeetCode 101. Symmetric Tree | 对称二叉树

题目

在这里插入图片描述

分析

思路:
本题采用swift语言来实现,swift语言效率很高,编写代码的过程中也可以省略一些括号,且这个语言本身跑代码很快,效率较Java高很多。回归正题,这题要求我们判断一棵树是否为对称树,采用递归的思想可解,判断某个节点的两个子节点是否相等,如果同时为空,返回ture,不等返回false,非空相等则继续比较子树。
swift语法:
var:可变参数。
?:参数内容可选,在取值和调用方法时需要判断是否为nil再执行调用。
init:这是类的构造方法。
方法参数:一般第一项是外部参数,第二项是内部参数,第三项是类型(冒号之后),外部参数可用下划线省略,省略后在调用处则默认使用内部参数。

swift解

public class TreeNode {
      public var val: Int
      public var left: TreeNode?
      public var right: TreeNode?
      public init(_ val: Int) {
          self.val = val
          self.left = nil
          self.right = nil
      }
}
class Solution {
    func isSymmetric(_ root: TreeNode?) -> Bool {
        if root == nil {
            return true
        }        
        return comareRoot(root?.left, root?.right);
    }
    func comareRoot(_ leftRoot : TreeNode?, _ rightRoot:TreeNode?) -> Bool {
        if leftRoot?.val != rightRoot?.val {
            return false
        }else if leftRoot == nil && rightRoot == nil {
            return true
        }else {
            return comareRoot(leftRoot?.left, rightRoot?.right) && comareRoot(leftRoot?.right, rightRoot?.left)
        }
    }
}

在这里插入图片描述

Java解

public class Solution {
    boolean isSymmetrical(TreeNode pRoot)
    {
        if(pRoot == null) {
            return true;
        }
        return compareNode(pRoot.left, pRoot.right);
    }
    
    boolean compareNode(TreeNode left, TreeNode right) {
        if(left == null && right == null) {
            return true;
        }else if(left == null && right != null) {
            return false;
        }else if(left != null && right == null) {
            return false;
        }
        if(left.val == right.val) {
            return compareNode(left.left,right.right) && compareNode(left.right,right.left);
        }else {
            return false;
        }
    }
    
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值