劍指offer 10二叉樹和為某一路徑值

2021-10-01 19:46:20 字數 709 閱讀 9883

輸入一顆二叉樹的跟節點和乙個整數,列印出二叉樹中結點值的和為輸入整數的所有路徑。路徑定義為從樹的根結點開始往下一直到葉結點所經過的結點形成一條路徑。

要求一路徑的和,那麼必然終止條件為葉子結點,從根結點出發,從左往右,每條路徑的和都與給定的值比較,自然能求出。

但往往二叉樹的題,都會用到遞迴,本身是二叉樹,那麼子樹必定為二叉樹,如果找到規律??

我們可以這樣想,遞迴一次,舊呼叫系統棧一次儲存資料。既然要路徑上的所有結點的和等於給定的值,就說明給定的值減去路徑的和等於0。我們就不難想到,每次遞迴減去當前根結點的值,一直到葉子結點,如果最後的值等於葉子結點的值那不就正好可以求解此題

我們要考慮特殊情況,如果二叉樹只有乙個結點,並恰巧那個結點的值等於給定的值呢??所以,每回減去當前根結點的值前,先判斷是否相等,再減去

如果到葉子結點不相等,那麼就往上走,再往右邊走

有了上述思路,就不難寫出如下**

class

solution

path.

pop_back()

;}vectorint>

>

findpath

(treenode* root,

int expectnumber)

};

劍指offer 判斷二叉樹是否為平衡二叉樹

平衡二叉樹 balanced binary tree 具有以下性質 它是一棵空樹或它的左右兩個子樹的高度差的絕對值不超過1,並且左右兩個子樹都是一棵平衡二叉樹。第一種遞迴思路,根據定義來,遞迴返回 r l 1 and balancetree r and balancetree l 但是這個自頂向下的...

劍指offer 二叉樹 二叉樹搜尋樹

package bst import j a.util.public class bst if pre.length 0 in.length 0 treenode root new treenode pre 0 for int i 0 i in.length i return root 判斷給定陣列...

劍指offer 平衡二叉樹

輸入一棵二叉樹,判斷該二叉樹是否是平衡二叉樹 1 重複遍歷結點 參考上一題求二叉樹的深度,先求出根結點的左右子樹的深度,然後判斷它們的深度相差不超過1,如果否,則不是一棵二叉樹 如果是,再用同樣的方法分別判斷左子樹和右子樹是否為平衡二叉樹,如果都是,則這就是一棵平衡二叉樹。但上面的方法在判斷子樹是否...