劍指 Offer 28 對稱的二叉樹

2021-10-20 04:19:14 字數 1527 閱讀 7389

請實現乙個函式,用來判斷一棵二叉樹是不是對稱的。如果一棵二叉樹和它的映象一樣,那麼它是對稱的

解題思路:

對稱二叉樹定義: 對於樹中 任意兩個對稱節點 l 和 r ,一定有:

l.val = r.val :即此兩對稱節點值相等。

l.left.val = r.right.val :即 l 的 左子節點 和 r 的 右子節點 對稱;

l.right.val = r.left.val :即 l 的 右子節點 和 r 的 左子節點 對稱。

根據以上規律,考慮從頂至底遞迴,判斷每對節點是否對稱,從而判斷樹是否為對稱二叉樹。

演算法流程:

issymmetric(root) :

特例處理:若根節點 root 為空,則直接返回 true 。

返回值:即 recur(root.left, root.right) ;

recur(l, r) :

終止條件:

當 l 和 r 同時越過葉節點: 此樹從頂至底的節點都對稱,因此返回 true;

當 l 或 r 中只有乙個越過葉節點: 此樹不對稱,因此返回 false ;

當節點 l 值 !=節點 r 值: 此樹不對稱,因此返回 false ;

遞推工作:

判斷兩節點 l.left 和 r.right 是否對稱,即 recur(l.left, r.right) ;

判斷兩節點 l.right 和 r.left 是否對稱,即 recur(l.right, r.left) ;

返回值:兩對節點都對稱時,才是對稱樹,因此用與邏輯符 && 連線。

時間複雜度 o(n) : 其中 n 為二叉樹的節點數量,每次執行 recur() 可以判斷一對節點是否對稱,因此最多呼叫 n/2 次 recur() 方法。

空間複雜度 o(n) : 最差情況下(見下圖),二叉樹退化為鍊錶,系統使用 o(n) 大小的棧空間

劍指offer 28對稱的二叉樹

題目 判斷一棵二叉樹是不是對稱的。如果一棵二叉樹和它的映象一樣,那麼它是對稱的。思路分析 剛解答過27題,容易受上題影響,但大致思路是一致的 遞迴和迭代。舉乙個對稱的二叉樹例子可知,若二叉樹是對稱的,則其左子樹的左節點和其右子樹的右節點相等,左子樹的右節點和其右子樹的左節點相等。遞迴public b...

劍指 Offer 28 對稱的二叉樹

請實現乙個函式,用來判斷一棵二叉樹是不是對稱的。如果一棵二叉樹和它的映象一樣,那麼它是對稱的。例如,二叉樹 1,2,2,3,4,4,3 是對稱的。1 2 2 3 4 4 3 但是下面這個 1,2,2,null,3,null,3 則不是映象對稱的 1 2 2 3 3示例 1 輸入 root 1 2,2...

劍指 Offer 28 對稱的二叉樹

請實現乙個函式,用來判斷一棵二叉樹是不是對稱的。如果一棵二叉樹和它的映象一樣,那麼它是對稱的。例如,二叉樹 1,2,2,3,4,4,3 是對稱的。1 2 2 3 4 4 3 但是下面這個 1,2,2,null,3,null,3 則不是映象對稱的 1 2 2 3 3 示例 1 輸入 root 1,2,...