之前没有做过图的题目,一开始不会做,看了别人的代码才懂。
显然这题是很重要的,要好好记忆和练习。
/**
* Definition for a binary tree node.
* public class TreeNode {
* int val;
* TreeNode left;
* TreeNode right;
* TreeNode(int x) { val = x; }
* }
*/
public class Solution {
public boolean isSymmetric(TreeNode root) {
if(root == null) return true;
else return isSymHelper(root.left, root.right);
}
public boolean isSymHelper(TreeNode l, TreeNode r) {
if(l == null && r == null) return true;
else if(l == null || r == null) return false;
if(l.val != r.val) return false;
if(!isSymHelper(l.left, r.right)) return false;
if(!isSymHelper(l.right, r.left)) return false;
return true;
}
}
这主要是通过DFS递归的方法,比较两边node的值是否相等。
fight on!
update:
这样写思路更清晰一些:
public class Solution {
public boolean isSymmetric(TreeNode root) {
if(root == null) return true;
else return isSymHelper(root.left, root.right);
}
public boolean isSymHelper(TreeNode l, TreeNode r) {
if(l == null && r == null) return true;
else if(l == null || r == null) return false;
if(l.val != r.val) return false;
return isSymHelper(l.left, r.right)&&isSymHelper(l.right, r.left);
}
}