在一棵二叉樹中尋找所有路徑,每條路徑節點值的和為目標值sum。假設根節點的值為val,由於二叉樹的子樹也是二叉樹,問題可以轉化為在左子樹與右子樹上尋找路徑,該路徑上的節點和為sum-val。所以可以使用二叉樹的前序遍歷的遞迴實現。
遞迴時新增路徑上的節點,到達葉子節點時判斷sum是否為0,如果為0則將這條路徑儲存。當遞迴返回父節點前刪除路徑上的當前節點。
/**
* definition for a binary tree node.
* public class treenode
* }*/class
solution
rcur
(root, sum)
;return ans;
}private
void
rcur
(treenode root,
int sum)
}//如果不是葉子節點就遍歷其子節點,其子樹中某條路徑和為sum - root.val
if(root.left != null)
rcur
(root.left, sum);if
(root.right!= null)
rcur
(root.right, sum)
;//返回父節點之前,刪除路徑上當前節點
path.
removelast();}}
劍指Offer 34 二叉樹中和為某一值的路徑
題目描述 輸入一顆二叉樹和乙個整數,列印出二叉樹中結點值的和為輸入整數的所有路徑。路徑定義為從樹的根結點開始往下一直到葉結點所經過的結點形成一條路徑。struct treenode class solution void dfs treenode root,int s,vector ret,vect...
劍指Offer 34 二叉樹中和為某一值的路徑
輸入一棵二叉樹和乙個整數,列印出二叉樹中節點值的和為輸入整數的所有路徑。從樹的根節點開始往下一直到葉節點所經過的節點形成一條路徑。例 給定如下二叉樹,以及目標和 sum 22,5 4 8 11 13 4 7 2 5 1返回 5,4,11,2 5,8,4,5 思路很明確,深度優先搜尋sum node ...
劍指Offer 34 二叉樹中和為某一值的路徑
20.5.3 最佳寫法 注意不要在新增了一條路徑後直接返回,任何乙個節點返回時都要從路徑中pop出去 class solution void dfs treenode root,int sum if root left dfs root left,sum if root right dfs root...