思路:
先序遍歷: 按照 「根、左、右」 的順序,遍歷樹的所有節點。
路徑記錄: 在先序遍歷中,記錄從根節點到當前節點的路徑。當路徑為 ① 根節點到葉節點形成的路徑 且 ② 各節點值的和等於目標值 sum 時,將此路徑加入結果列表。
演算法流程:
終止條件:節點為空
遞推工作:計算count,將結點加入到temp路徑中。當count=sum時,將temp加入到結果列表中,開啟左右遞迴,遞迴結束後記得把temp和count恢復到上一層的值。注意:count不是清0!temp也不是直接加入到結果列表,而是複製乙個temp加入到結果列表中,否則當temp改變時,結果列表也會發生改變
1、當root的左右節點為空時就要判斷count是否等於sum,否則如果在root為空時判斷count是否等於sum,就會判斷兩次,因為葉節點有兩個為空的左右節點。
2、不能在結果等於sum時才將count和temp列表恢復,而是應該在每次遍歷完左右節點以後將count和temp恢復。
3、不用擔心當count > sum時還在繼續遞迴,因為後面可能會有負數節點。count和temp只管繼續加就行了
劍指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...