struct btnode
;
思路:因為求路徑是從根節點到葉子結點,所以我們可以考慮二叉樹的先序遍歷框架,如下所示:
void preorder(btnode *root)
}
但是在二叉樹的遞迴框架中,回溯到父節點時我們是不能獲取到前面遞迴經過的路徑上的節點的值的,因為這些操作是系統自動用遞迴工作棧來完成的,所以我們得自己定義乙個陣列把經過的路徑上的節點儲存下來,每訪問到乙個節點就把該結點新增到路徑陣列中,當到達葉子節點時,我們看路徑陣列中的值的和是否滿足,滿足則列印輸出陣列中的節點路徑,每當從子節點回到父節點的時候,要將路徑陣列中的值去除。即遞迴入棧的時候要新增節點的值,遞迴出棧的時候要去除節點的值。
基於上述思路**如下:
void initfindpath(btnode *root,int sum)
//該函式充分利用了二叉樹前序遍歷的遞迴演算法框架,在原演算法的基礎上新增了乙個儲存路徑的陣列,遞迴入棧,就將
//當前結點的值加入陣列,遞迴出棧就去除當前結點在路徑陣列中的值,本質上是乙個回溯演算法。
void findpath(btnode *root,int sum,std::vector&path,int currentsum)
coutfindpath(root->leftchild,sum,path,currentsum);
if(root->rightchild)
findpath(root->rightchild,sum,path,currentsum);
path.pop_back();//在返回到父節點之前,刪除路徑中當前結點的值,本質上是回溯
}
列印二叉樹中和為某一值的路徑
輸入乙個二叉樹,查詢該樹的所有路徑 從根結點到葉結點的通路 並返回和 路徑上所有結點值的和 為某一指定值的路徑。1 二叉樹中和為某一值的路徑 2void findpath binarytreenode proot int expectedsum vector path int currentsum ...
二叉樹和為某一值的路徑
題目 二叉樹和為某一值的路徑 描述 輸入一顆二叉樹和乙個整數,列印出二叉樹中結點值的和為輸入整數的所有路徑。路徑定義為從樹的根結點開始往下一直到葉結點所經過的結點形成一條路徑。延伸 若要求路徑不一定非得從二叉樹的根節點或葉節點開始或結束,求所有節點數值總和等於某個給定值的所有路徑。找出二叉樹中所有滿...
二叉樹和為某一值的路徑
此題的路徑是從根到葉子節點,包含這兩個本身 class solution 返回二維列表,內部每個列表表示找到的路徑 def findpath self,root,expectnumber write code here 必須根到葉節點,包括根和葉子節點 前序遍歷非遞迴法 if root none r...