劍指 Offer 28 對稱的二叉樹

2021-10-09 01:54:02 字數 1679 閱讀 5435

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

例如,二叉樹 [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

,3,4

,4,3

]輸出:true

示例 2:

輸入:root =[1

,2,2

,null,3

,null,3

]輸出:false

0<= 節點個數 <=

1000

這個題剛開始思路是在想對稱的二叉樹應該是有什麼規律的,後面發現對稱的二叉樹的中序遍歷結果是關於根節點對稱的,但是在後面寫出**之後提交,很多樣例過不了。想了才知道這種情況是只針對於滿二叉樹的情況,如果有葉子節點為空的話,這樣的思路就過不了了,後面想了很久也沒想到解決的辦法

就去看題解看看有沒有用這種方法解決的,發現都沒有,,都是用遞迴,其實當時也是想過遞迴但是沒想到怎麼去遞迴,遞迴的方式一定要選好

最後寫的思路是遞迴判斷當前傳進來的兩個節點,如果都為空返回true,值不相等返回false,乙個節點為空乙個節點不為空返回false,再遞迴比較該第乙個節點的左節點和該第二個節點的右節點以及該第乙個節點的右節點和該第二個節點的左節點,這樣遞迴下去就可以得到最終結果了

注意的是首先得特判根節點是不是為空,是的話直接返回true

再就是遞迴的方式,判斷當前的兩個節點就行

貼出**:

class

treenode

}class

solution

return

$this

->

mid(

$root

->

left

,$root

->

right);

}//針對傳進來的兩個節點進行比較

function

mid(

$left

,$right

)//兩個值不相等返回falseif(

$left

->

val!=

$right

->

val)

//當乙個節點為空乙個節點不為空返回false,因為上面判了同時為空if(

$left

==null

||$right

==null

)//遞迴判斷兩個節點

return

$this

->

mid(

$left

->

left

,$right

->

right)&&

$this

->

mid(

$left

->

right

,$right

->

left);

}}

劍指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,...

劍指 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,...