题目:请实现一个函数,用来判断一棵二叉树是不是对称的。如果一棵二叉树和它的镜像一样,那么它是对称的。
分析:
root.left的对称节点是root.right,root.left.left的对称节点是root.right.right。root.left.right的对称节点是root.right.left
递归出口:
都为空指针则返回 true
只有一个为空则返回 false
两个指针当前节点值不相等 返回false
代码:
public static boolean isSymmetrical(BinaryTreeNode pRoot) {
return isSymmetrical(pRoot,pRoot);
}
public static boolean isSymmetrical(BinaryTreeNode pRoot1,BinaryTreeNode pRoot2) {
if (pRoot1 == null && pRoot2 == null)
return true;
if (pRoot1 == null || pRoot2 == null)
return false;
if (pRoot1.m_nValue != pRoot2.m_nValue)
return false;
return isSymmetrical(pRoot1.m_pLeft,pRoot2.m_pRight)
&& isSymmetrical(pRoot1.m_pRight,pRoot2.m_pLeft);
}