思路:
一、验证 左右子树是否可翻转对称的?
二、分析左右子树情况:
1)左右都也空 对称
2)左右有一个为空 不对称
3)左右都不为空,但数字不同 不对称
4)左右都不为空,且数字相同 当前节点对称,继续往下层节点递归
三、递归用后续遍历,因为必须先知道子节点是否相同,然后才返回给上一层节点;左右中,先对比外侧节点,再对比内测节点,最后两侧都是true才可以。
class Solution {public boolean isSymmetric(TreeNode root) {//验证 左右子树是否可翻转对称的?boolean ans = func(root.left,root.right);return ans;}public boolean func(TreeNode leftNode, TreeNode rightNode) {if(leftNode == null && rightNode == null) { //1、左右都也空 对称return true;}if(leftNode == null && rightNode != null) { //2、左右有一个为空 不对称return false;}if(leftNode != null && rightNode == null){return false;}if (leftNode.val != rightNode.val){ //3、左右不为空,但数字不同 不对称return false;}//4、代码到这里,就是左右不为空,且数字相同,那就得递归下去//后续遍历 左右中boolean a = func(leftNode.left, rightNode.right);//左:对比外侧boolean b = func(leftNode.right, rightNode.left);//右,对比内侧return a && b; //中}}