劍指Offer系列34 二叉樹中和為某一值的路徑

2021-10-06 23:40:49 字數 1610 閱讀 6556

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

示例:給定如下二叉樹,以及目標和 sum = 22,

5

/ \4 8

/ / \

11 13 4

/ \ / \

7 2 5 1

返回:

[[5,4,11,2],

[5,8,4,5]

]python

# definition for a binary tree node.

# class treenode:

# def __init__(self, x):

# self.val = x

# self.left = none

# self.right = none

# 思路:

# 這是二次樹的搜尋問題,採用回溯法:bfs+路徑記錄

# 複雜度:

# o(n)

class

solution

:def

pathsum

(self, root: treenode,

sum:

int)

-> list[list[

int]]:

res, path =

,[]# 結果列表,路徑列表

defrecur

(root,

sum):if

not root:

return

# 路徑更新

sum-= root.val # 目標值更新

ifsum==0

andnot root.left and

not root.right:

# 注意上述三條件缺一不可

list

(path)

)# 正確路徑記錄,注意深拷貝

recur(root.left,

sum)

# 左子樹

recur(root.right,

sum)

# 右子樹

path.pop(

)# 路徑恢復,這是回溯法的精髓

recur(root,

sum)

# 根節點

return res

c++
/**

* definition for a binary tree node.

* struct treenode

* };

*/class

solution

void

recur

(treenode* root, vectorint>>

&res, vector<

int> path,

int sum)

recur

(root-

>left, res, path, sum)

;recur

(root-

>right, res, path, sum);}

};

劍指offer系列 二叉樹的深度

題目描述 輸入一棵二叉樹,求其深度 樹的深度定義為 從根節點到葉子節點的路徑長度的最大值 示例 分析 對每個節點而言,以該節點為根節點的樹的深度為左子樹和右子樹深度的較大值加1.因此用遞迴可以很容易的實現 int depth treenode root 分析 同樣可以用遞迴來實現。為了使每個節點只遍...

劍指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,如果否,則不是一棵二叉樹 如果是,再用同樣的方法分別判斷左子樹和右子樹是否為平衡二叉樹,如果都是,則這就是一棵平衡二叉樹。但上面的方法在判斷子樹是否...