题目
分析
思路:
本题采用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;
}
}
}