全国美容网站建设深圳债务优化公司
解法一:递归
同时满足下面的条件,两个树互为镜像:
- 它们的两个根结点具有相同的值
- 每个树的右子树都与另一个树的左子树镜像对称:我们可以实现这样一个递归函数,通过「同步移动」两个指针的方法来遍历这棵树,p 指针和 q 指针一开始都指向这棵树的根,随后 p 右移时,q 左移,p 左移时,q 右移。每次检查当前 p 和 q 节点的值是否相等,如果相等再判断左右子树是否对称。
/*** Definition for a binary tree node.* public class TreeNode {* int val;* TreeNode left;* TreeNode right;* TreeNode() {}* TreeNode(int val) { this.val = val; }* TreeNode(int val, TreeNode left, TreeNode right) {* this.val = val;* this.left = left;* this.right = right;* }* }*/
class Solution {public boolean isSymmetric(TreeNode root) {return check(root.left, root.right);}public boolean check(TreeNode left, TreeNode right){if(left==null && right==null){return true;}if(left==null || right==null){return false;}return left.val==right.val && check(left.left, right.right) && check(left.right, right.left);}
}
注意:
- 循环传入的是根的左右节点,而不是根节点:
check(root.left, root.right)
- 正确性的判断还需要
left.val==right.val