劍指Offer對答如流系列 樹的子結構

2021-10-02 09:37:29 字數 916 閱讀 8016

輸入兩棵二叉樹a和b,判斷b是不是a的子結構。二叉樹的定義如下:

public

class

treenode

}

比如下面的 b是a的子結構

看了看《劍指offer》高質量**章節的面試題,發現難度都不高,但是沒有分析好邊界條件亦或是想當然就是容易出錯,細心從來不是說說而已。請重視自己**的規範性、完整性和魯棒性。

這道題的思路可以概況如下:

先對a樹進行遍歷,找到與b樹的根結點值相同的結點r;

判斷a樹中以r為根結點的子樹是否包含b樹一樣的結構。

// 方法入口,對每個結點遍歷判斷

public

boolean

hassubtree

(treenode root1,treenode root2)

return

doestree1hastree

(root1, root2)

||hassubtree

(root1.left, root2)

||hassubtree

(root1.right, root2);}

// 判斷root結點開始的子樹中各個結點是否相同

private

boolean

doestree1hastree

(treenode root1,treenode root2)

// 判斷兩個浮點數是否相等

private

boolean

equal

(double num1,

double num2)

劍指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 基本上是不可能的。如果我們另外定義乙個成員...