public class BSTNode<T extends Comparable<T>> {
T key;
BSTNode<T> left;
BSTNode<T> right;
BSTNode<T> parent;
public BSTNode(T key, BSTNode<T> parent, BSTNode<T> left, BSTNode<T> right) {
this.key = key;
this.parent = parent;
this.left = left;
this.right = right;
}
}
判断是否对称
public static boolean isSymmetricalTree(BSTNode<Integer> tree){
if (tree==null)return true;
return isSymmetricalTree(tree.left,tree.right);
}
/** A
* / \
* B B 非对称
* C D C D
*
*
* A
* / \
* B B 对称
* D C C D
*
* 判断条件:
* 深度相同的左子树的左结点与右子树的右结点值相同
* 深度相同的左子树的右结点与右子树的左结点值相同
*
* @param left
* @param right
* @return
*/
private static boolean isSymmetricalTree(BSTNode<Integer> left, BSTNode<Integer> right) {
if (left==null&&right==null)return true;
if (left==null||right==null)return false;
if (!left.key.equals(right.key))return false;
return isSymmetricalTree(left.left,right.right)&&isSymmetricalTree(left.right,right.left);
}