對稱二叉樹(java遞歸思路解答)

題目

給定一個二叉樹,找出其最小深度。

最小深度是從根節點到最近葉子節點的最短路徑上的節點數量。

說明: 葉子節點是指沒有子節點的節點。

示例:

給定二叉樹 [3,9,20,null,null,15,7],

    3
   / \
  9  20
    /  \
   15   7

返回它的最小深度 2.

思路

要判斷 二叉樹是對稱,可以把問題先分解爲兩步

  • 當前節點是否對稱
  • 當前節點的左右節點是否對稱
    微信截圖_20200221153828.jpg
    那問題又變成了左右節點是否對稱
  • 當前節點的左節點爲空,當前節點的右節點爲空,對稱,返回true
  • 當前節點的左節點或者右節點爲空,不對稱,返回false
  • 當前節點的左節點不爲空,當前節點的右節點不爲空,這裏就不要判斷是否爲空了,因爲上面小兩步已經爲 我們過濾掉爲空的情況。所以
    這裏要判斷是的,當前節點的左節的值與當前節點的右節的值是否相等,不相等的話返回false
  • 接下來看這個圖
    微信截圖_20200221155614.jpg

通過上面兩小步,就返回,(左節點的左節點與右節點的右節點 ) 與上 (左節點的右節點與右節點的左節點)

    public boolean isSymmetric(TreeNode root) {
        if (root == null) return true;
        return isSymmetric(root.left, root.right);
    }

    private boolean isSymmetric(TreeNode t1, TreeNode t2) {
        if (t1 == null && t2 == null) return true;
        if (t1 == null || t2 == null) return false;
        if (t1.val != t2.val) return false;
        return isSymmetric(t1.left, t2.right) && isSymmetric(t1.right, t2.left);
    }

有錯誤的話,希望大家指出。

發佈了171 篇原創文章 · 獲贊 48 · 訪問量 24萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章