輸入一顆二叉樹的根節點和乙個整數,列印出二叉樹中結點值的和為輸入整數的所有路徑。路徑定義為從樹的根結點開始往下一直到葉結點所經過的結點形成一條路徑。(注意: 在返回值的list中,陣列長度大的陣列靠前)首先要明確的是路徑具有以樹的根結點開始到葉結點結束的特點,而前序遍歷正是從根結點開始的遍歷。我麼可以以下圖的二叉樹為例,為找到和為22的路徑進行過程分析。struct treenode
};
很顯然的可以看出這裡有兩條符合要求的路徑(10 - 5 - 7和10 - 12),而具體的尋找過程可以簡單用下邊表示:
步驟操作
是否葉結點
路徑路徑結點和
1訪問結點10否10
102訪問結點5
否10 - 5153
訪問結點4
是10 - 5 - 4194
回到結點5
否10 - 5155
訪問結點7
是10 - 5 - 722
6回到結點5
否10 - 5157
回到結點10否10
108訪問結點12
是10 - 1222
從上述過程可以分析得到如下演算法步驟:
1-利用前序遍歷訪問二叉樹的結點,並將結點新增到路徑中,同時累加結點值
2-如果該結點為葉子結點,且結點值和期望值相等,則該路徑符合要求;如果該結點非葉子結點,則繼續訪問其子節點
3-當結點訪問結束後,遞迴函式將自動回到其父節點,注意在回退過程中刪除當前結點,以保證返回父節點是路徑剛好是從根結點到父節點。
根據以上演算法步驟可以寫成如下**:
class
solution
findsubpath
(root-
>left, expectnumber)
;//遍歷左子樹
findsubpath
(root-
>right, expectnumber)
;//遍歷右子樹
path.
pop_back()
;//遞迴完成一次結點回退一次,即回到父結點
《劍指Offer》24 二叉樹中和為某一值的路徑
題目 24.二叉樹中和為某一值的路徑 知識點 二叉樹 題目描述 輸入一顆二叉樹的跟節點和乙個整數,列印出二叉樹中結點值的和為輸入整數的所有路徑。路徑定義為從樹的根結點開始往下一直到葉結點所經過的結點形成一條路徑。注意 在返回值的list中,陣列長度大的陣列靠前 解題思路 解題思路就是遞迴掃瞄二叉樹,...
劍指offer 24 二叉樹中和為某一值的路徑
題目描述 輸入一顆二叉樹的根節點和乙個整數,列印出二叉樹中結點值的和為輸入整數的所有路徑。路徑定義為從樹的根結點開始往下一直到葉結點所經過的結點形成一條路徑。注意 在返回值的list中,陣列長度大的陣列靠前 這道題目的思路比較簡單,大家可以想一下,如果我們手動去做這道題的話,是怎麼做的呢,就是先把所...
劍指offer(24)二叉樹中和為某一值的路徑
輸入一顆二叉樹和乙個整數,列印出二叉樹中結點值的和為輸入整數的所有路徑。路徑定義為從樹的根結點開始往下一直到葉結點所經過的結點形成一條路徑 這題基本上一看就知道應該深度遍歷整個樹,並且把已經走過的節點的和與期望值作比較就行,如果走到底還不符合要求的話,就要回退值。function findpath ...