题解 | #对称的二叉树#
对称的二叉树
http://www.nowcoder.com/practice/ff05d44dfdb04e1d83bdbdab320efbcb
递归
1、如果有左右子树,判断左右子树是否对称相等
2、如果都没有左右子树,返回true
*****
判断左右子树是否对称相等
如果node1不等于node2的值val,return false
如果node1有左子树时
- 如果node2有右子树;递归判断node2的左右子树是否对称相等 ;否则返回false
同理与2相反
如果node2有左右节点;return false 否则返回true( 到了这一步,node1必然是左右节点均为null)
public class Solution { boolean isSymmetrical(TreeNode pRoot) { if(pRoot==null){ return true; } //如果左右子树都存在 if(pRoot.left!=null&&pRoot.right!=null){ return JudNodeEque(pRoot.left,pRoot.right); } if(pRoot.left==null&&pRoot.right==null) //判断左右子树的是对称相等 return true; return false; } public boolean JudNodeEque(TreeNode node1,TreeNode node2){ //如果node1!=node2的值val,return false if(node1.val!=node2.val){ return false; } //1、如果node1有左子树时 //2、如果node2有右子树;递归 ;否则返回false if(node1.left!=null){ if(node2.right!=null){ return JudNodeEque(node1.left,node2.right); }else{ return false; } } //同理与1、2相反 if(node1.right!=null){ if(node2.left!=null){ return JudNodeEque(node1.right,node2.left); }else{ return false; } } // 到了这一步,node1必然是左右节点均为null if(node2.left!=null||node2.right!=null){ return false; } //如果node2有左右节点;return false return true; }
}
```