劍指Offer對答如流系列 對稱的二叉樹

2022-08-30 02:24:08 字數 865 閱讀 2425

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

樹的結構如下:

public class treenode 

}

下圖中,a是對稱的 b c都不是

根節點直接比較即可,我們重點分析左右子樹。

以上面滿足對稱的二叉樹為例,可以看出,左右子樹也剛好是呈映象的兩顆二叉樹

在比較的時候我們

對左子樹可以採用 父節點--> 左節點 --> 右節點 方式遍歷 --- 6 5 7

對右子樹可以採用 父節點--> 右節點 --> 左節點 方式遍歷 --- 6 5 7

根據順序 比較即可。

public boolean issymmetrical(treenode proot)

return isequal(proot.left,proot.right);

}private boolean isequal(treenode proot1,treenode proot2)

if(proot1==null || proot2==null)

return proot1.val==proot2.val

&& isequal(proot1.left, proot2.right)

&& isequal(proot1.right, proot2.left);

}

劍指Offer對答如流系列 醜數

我們把只包含質因子2 3和5的數稱作醜數 ugly number 求按從小到大的順序的第n個醜數。例如6 8都是醜數,但14不是,因為它包含質因子7。習慣上我們把1當做是第乙個醜數。判斷乙個數是不是醜數,最容易想到的方法就是讓這個數不斷除以2,3,5。對於第n個醜數,只要從1開始,依次判斷每個數是不...

劍指Offer對答如流系列 剪繩子

給你一根長度為n繩子,請把繩子剪成m段 m n都是整數,n 1並且m 1 每段的繩子的長度記為k 0 k 1 k m k 0 k 1 k m 可能的最大乘積是多少?例如當繩子的長度是8時,我們把它剪成長度分別為2 3 3的三段,此時得到最大的乘積18。遇到問題,先分析問題,由分析的結果確定所運用的演...

劍指Offer對答如流系列 包含min函式的棧

定義棧的資料結構,請在該型別中實現乙個能夠得到棧的最小元素的min函式。在該棧中,呼叫min push及pop的時間複雜度都是o 1 push 和 pop均容易實現。主要就是min函式的定義,如果要通過操作push和pop操作獲取最小元素時間複雜度為o 1 基本上是不可能的。如果我們另外定義乙個成員...