1. 程式人生 > >劍指offer:對稱的二叉樹(java)

劍指offer:對稱的二叉樹(java)


/**
 * 題目:
 *      請實現一個函式,用來判斷一顆二叉樹是不是對稱的。
 *      注意,如果一個二叉樹同此二叉樹的映象是同樣的,定義其為對稱的。
 *
 */
public class P159_IsSymmerical {
    boolean isSymmetrical(TreeNode pRoot)
    {
        if (pRoot == null) {
            return true;
        }
        return Symmerical(pRoot.left, pRoot.right);
    }

    public boolean Symmerical(TreeNode left, TreeNode right) {
        if (left == null && right == null) {
            return true;
        }

        if (left != null && right == null || left == null && right != null) {
            return false;
        }
        return left.val == right.val && Symmerical(left.left, right.right) && Symmerical(left.right, right.left);
    }

    public static void main(String[] args) {
        TreeNode node1 = new TreeNode(8);

        TreeNode node2 = new TreeNode(6);
        node1.left = node2;

        TreeNode node3 = new TreeNode(6);
        node1.right = node3;

        TreeNode node4 = new TreeNode(5);
        node2.left = node4;

        TreeNode node5 = new TreeNode(7);
        node2.right = node5;

        TreeNode node6 = new TreeNode(7);
        node3.left = node6;

        TreeNode node7 = new TreeNode(5);
        node3.right = node7;

        P159_IsSymmerical test = new P159_IsSymmerical();
        boolean result = test.isSymmetrical(node1);
        System.out.print(result);
    }
}