給定乙個二叉樹和乙個目標和,判斷該樹中是否存在根節點到葉子節點的路徑,這條路徑上所有節點值相加等於目標和。
說明: 葉子節點是指沒有子節點的節點。
示例:
給定如下二叉樹,以及目標和 sum = 22,
5/ \
4 8
/ / \
11 13 4
/ \ \
7 2 1
返回 true, 因為存在目標和為 22 的根節點到葉子節點的路徑 5->4->11->2。
輸入一顆二叉樹的跟節點和乙個整數,列印出二叉樹中結點值的和為輸入整數的所有路徑。路徑定義為從樹的根結點開始往下一直到葉結點所經過的結點形成一條路徑。(注意: 在返回值的list中,陣列長度大的陣列靠前)
這類問題可以用帶記憶的dfs來解決。分享乙個這類問題的典型解法。
深度優先搜尋。使用前序遍歷,使用兩個全域性變數result和tmp,result來存放最終結果,tmp用來存放臨時結果。
每次遍歷,我們先把root的值壓入tmp,然後判斷當前root是否同時滿足:
如果滿足條件,就將tmp壓入result中,否則,依次遍歷左右子樹。需要注意的是,遍歷左右子樹的時候,全域性變數tmp是不清空的,直到到了根結點才請空tmp。
class solution
tmp.push_back(root->val);//節點不為空就放進去
if((expectnumber - root->val ) == 0 && root->left == null && root->right == null)
//遍歷左子樹
findpath(root->left, expectnumber - root->val);//否則接著向下走,
//遍歷右子樹
findpath(root->right, expectnumber - root->val);
tmp.pop_back();//走完了之後,這一條已經判斷完了,
return result;
}private:
vector> result;
vectortmp;
};
二叉樹的路徑總和
給定乙個二叉樹和乙個目標和,判斷該樹中是否存在根節點到葉子節點的路徑,這條路徑上所有節點值相加等於目標和。說明 葉子節點是指沒有子節點的節點。示例 給定如下二叉樹,以及目標和 sum 22,5 4 8 11 13 4 7 2 1返回 true,因為存在目標和為 22 的根節點到葉子節點的路徑 5 4...
二叉樹的路徑總和
definition for a binary tree node.struct treenode 給定乙個二叉樹和乙個目標和,找到所有從根節點到葉子節點路徑總和 等於給定目標和的路徑。說明 葉子節點是指沒有子節點的節點。示例 給定如下二叉樹,以及目標和 sum 22,5 4 8 11 13 4 7...
二叉樹的路徑總和
給定乙個二叉樹和乙個目標和,判斷該樹中是否存在根節點到葉子節點的路徑,這條路徑上所有節點值相加等於目標和。1 最直接的方法就是利用遞迴,遍歷整棵樹 如果當前節點不是葉子,對它的所有孩子節點,遞迴呼叫 haspathsum 函式,其中 sum 值減去當前節點的權值 如果當前節點是葉子,檢查 sum 值...