題目:24. 二叉樹中和為某一值的路徑
知識點:二叉樹
題目描述:
輸入一顆二叉樹的跟節點和乙個整數,列印出二叉樹中結點值的和為輸入整數的所有路徑。路徑定義為從樹的根結點開始往下一直到葉結點所經過的結點形成一條路徑。(注意: 在返回值的list中,陣列長度大的陣列靠前)
解題思路:
解題思路就是遞迴掃瞄二叉樹,同時每一次將目標值修改為目標值減去當前節點值並將當前節點值新增到路徑陣列中,如果目標值已經為零且為葉子節點,則將當前的路徑陣列儲存到結果陣列。
**:
//解法一(自研):
vector> findpath(treenode* root,int expectnumber)
void find(vector>& res, vectorcur, treenode* root, int expectnumber)else if(expectnumber - root->val > 0)
}//解法二(劍指offer):
void findpath(binarytreenode* proot, int expectedsum)
void findpath
( binarytreenode* proot,
int expectedsum,
std::vector& path,
int& currentsum
) // 如果不是葉結點,則遍歷它的子結點
if(proot->m_pleft != nullptr)
findpath(proot->m_pleft, expectedsum, path, currentsum);
if(proot->m_pright != nullptr)
findpath(proot->m_pright, expectedsum, path, currentsum);
// 在返回到父結點之前,在路徑上刪除當前結點,
// 並在currentsum中減去當前結點的值
currentsum -= proot->m_nvalue;
path.pop_back();
}
劍指offer 24 二叉樹中和為某一值的路徑
輸入一顆二叉樹的根節點和乙個整數,列印出二叉樹中結點值的和為輸入整數的所有路徑。路徑定義為從樹的根結點開始往下一直到葉結點所經過的結點形成一條路徑。注意 在返回值的list中,陣列長度大的陣列靠前 struct treenode 首先要明確的是路徑具有以樹的根結點開始到葉結點結束的特點,而前序遍歷正...
劍指offer 24 二叉樹中和為某一值的路徑
題目描述 輸入一顆二叉樹的根節點和乙個整數,列印出二叉樹中結點值的和為輸入整數的所有路徑。路徑定義為從樹的根結點開始往下一直到葉結點所經過的結點形成一條路徑。注意 在返回值的list中,陣列長度大的陣列靠前 這道題目的思路比較簡單,大家可以想一下,如果我們手動去做這道題的話,是怎麼做的呢,就是先把所...
劍指offer(24)二叉樹中和為某一值的路徑
輸入一顆二叉樹和乙個整數,列印出二叉樹中結點值的和為輸入整數的所有路徑。路徑定義為從樹的根結點開始往下一直到葉結點所經過的結點形成一條路徑 這題基本上一看就知道應該深度遍歷整個樹,並且把已經走過的節點的和與期望值作比較就行,如果走到底還不符合要求的話,就要回退值。function findpath ...