輸入一顆二叉樹的根節點和乙個整數,列印出二叉樹中結點值的和為輸入整數的所有路徑。路徑定義為從樹的根結點開始往下一直到葉結點所經過的結點形成一條路徑。(注意: 在返回值的list中,陣列長度大的陣列靠前)注意:並未實現 陣列長度大的靠前。
遞迴地遍歷獲取路徑
如果到達葉節點,且和符合,則輸出
否則不是葉節點的話,繼續遞迴至其左右子樹
返回父節點前,刪除 當前路徑中 儲存的當前節點值。
使用 vector 實現 stack。push_back, pop_back
注意:在寫的時候出了兩個錯誤,以後要避免
if(root == nullptr) 寫成 了 if(root = nullptr) ,少些乙個等於號,!!!!非常嚴重
findpath 函式沒寫返回值!!
/*
struct treenode
};*/
class
solution
void
findpathcore
(treenode* root,
int expectnumber,
int sumval,
vectorint>
>
& out, vector<
int>
& path)
else
//返回父節點前,刪除當前節點。
/*非遞迴法:後序遍歷
1.進棧時候,把值同時壓入路徑的向量陣列,修正路徑的和
2.出棧時候,先判斷和是否相等,且該節點是否是葉節點,
判斷完成後保持和棧一致,丟擲路徑,修改路徑的和
3.向量陣列和棧的操作要保持一致
*/class
solution
root = s.
top();
if(expectnumber ==
0&& root-
>left ==
null
&& root-
>right ==
null
) res.
push_back
(v);
s.pop(
); v.
pop_back()
; expectnumber +
= root-
>val;
//右子數沒遍歷就遍歷,如果遍歷就強迫出棧if(
!s.empty()
&& s.
top()-
>left == root)
root = s.
top()-
>right;
else
root =
null
;//強迫出棧
}return res;}}
;
二叉樹(五)二叉樹中某一路徑之和為某一整數
思路 對於二叉樹中的某一節點,如果是葉子節點,將其加入到path中,乙個vector 然後算vector中的和是否為需要的整數,如果是就列印出來,如果和不滿足就退出函式,退出前pop vector 如果不是葉子節點,直接將當前值加入到path中,再遞迴呼叫,當前節點變為當前節點的左節點,右節點 本函...
劍指offer 二叉樹中和為某一路徑的和
一 問題描述 輸入一顆二叉樹和乙個整數,列印出二叉樹中結點值的和為輸入整數的所有路徑。路徑定義為從樹的根結點開始往下一直到葉結點所經過的結點形成一條路徑。二 思路 採用遞迴思想,如果某一路徑和為目標值且當前節點是葉子節點,那麼將當前路徑存入所求的陣列中,如果不是,遞迴遍歷左子樹和右子樹,但是一定要記...
二叉樹求單一路徑總和
給定乙個二叉樹和乙個目標和,判斷該樹中是否存在根節點到葉子節點的路徑,這條路徑上所有節點值相加等於目標和。說明 葉子節點是指沒有子節點的節點。給定如下二叉樹,以及目標和 sum 22,5 4 8 11 13 4 7 2 1返回 true,因為存在目標和為 22 的根節點到葉子節點的路徑 5 4 11...