假设一棵二叉树有N层
第二层:左节点=右节点
第三层:左左=右右,左右=右左
第四层:左1左=右1右,左1右=右1左,左2左=右2右,左2右=右2左(1为外,2为内)
。
。
。
我们使用递归实现
class TreeNode:
def __init__(self, x):
self.val = x
self.left = None
self.right = None
class Solution:
def isSymmetrical(self, pRoot):
if not pRoot:
return True
return self.panduan(pRoot.left,pRoot.right)
#递归实现函数
def panduan(self,left,right):
if not left and not right:
return True
if not left or not right:
return False
if left.val!=right.val:
return False
return self.panduan(left.left,right.right) and self.panduan(left.right,right.left)
下面是java实现代码:
public class TreeNode {
int val = 0;
TreeNode left = null;
TreeNode right = null;
public TreeNode(int val) {
this.val = val;
}
}
public class Solution {
boolean isSymmetrical(TreeNode pRoot)
{
if(pRoot==null)return true;
return compare(pRoot.left,pRoot.right);
}
public boolean compare(TreeNode left,TreeNode right){
if(left==null)return right==null;
if(right==null)return false;
if(left.val!=right.val)return false;
return compare(left.left,right.right)&&compare(left.right,right.left);
}
}