题目描述
判断一棵二叉树是不是关于根结点左右对称的。
原题链接:对称的二叉树
思路
最开始打算用广度遍历解题,但是写到遍历每一层的时候突然想到还要使用新的容器来存储这一层的节点值,有点浪费而且还不匹配这道题的难度定位,于是乎想到计算二叉树的最大深度那一道题,直接递归解题就完了。
- 递归每一步:拿到两个需要对比的节点leftNode和rightNode,那么如果是对称的,leftNode == rightNode和leftNode.left == rightNode.right和leftNode.right == rightNode.left应该都是成立的。
- 出口:当前步骤需要判断的两个节点要么同时为null要么同时存在,同时存在进行递归,同时不存在视为对称,存在一个返回false。
递归
boolean isSame(TreeNode left,TreeNode right){
if(left==null && right==null) return true;
if(left==null || right==null) return false;
return isSame(left.left,right.right) &&
isSame(left.right,right.left) &&
left.val==right.val;
}