判断二叉树是否对称

题目
  • 判断二叉树是否为对称二叉树
解法
  • 构建二叉树
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);
    }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值