判斷二叉樹是不是鏡像對稱的(Java 版)

最近面試做了個算法題,判斷二叉樹是不是鏡像對稱的。

理解一下鏡像對稱:就是從中間對摺能完全重合且節點值相同;

這裏是用遞歸調用來實現的,話不多說,直接上代碼,如下:

    /*
    * 定義一個樹節點類
    */
    public class TreeNode {
        int val;
        TreeNode left;
        TreeNode right;

        TreeNode(int x) {
            val = x;
        }
    }


    // 核心算法如下
    public boolean isMirrorSymmetry(TreeNode root) {
        if (root == null) {
            return true;
        }

        return isMirrorSymmetry(root.left, root.right);
    }

    public boolean isMirrorSymmetry(TreeNode node1, TreeNode node2) {

        if (node1 == null && node2 == null) return true;

        if (node1 == null || node2 == null) return false;

        
        // 左子樹和右子樹不僅要比較當前節點值是否相等,還需要比較二者的子樹之間是否一致
        // 由於是鏡像對稱,故 node1 的左子節點要和 node2 的右子節點比較,同理...

        return node1.val == node2.val
                && isMirrorSymmetry(node1.left, node2.right)
                && isMirrorSymmetry(node1.right, node2.left);
    }

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章