輸入一顆二叉樹的跟節點和乙個整數,列印出二叉樹中結點值的和為輸入整數的所有路徑。路徑定義為從樹的根結點開始往下一直到葉結點所經過的結點形成一條路徑。
利用深度優先搜尋遍歷所有的路徑,然後將路徑壓入vector>中,並返回。
/
* 構造的樹
*9*/ \ *45
*/ \ /\
*110
23* \
*6*/
構造樹用前序和中序序列確定前序:9,4,1,10,5,2,3,6
中序:1,4,10,9,2,5,3,6
輸入:樹的根節點 root 以及目標值 23
輸出:一共有 2 條滿足條件的路徑,分別是:
9 4 10
9 5 3 6
#include #include #include using namespace std;
struct treenode
};class solution
void dfs(treenode* root,int s,vector> &vvtrace,vector&vtrace)
// 如果當前結點的左孩子不為空,則呼叫遞迴對左自己進行dfs
if(root->left)
dfs(root->left,s-root->val,vvtrace,vtrace);
// 如果當前結點的右孩子不為空,則呼叫遞迴對右自己進行dfs
if(root->right)
dfs(root->right,s-root->val,vvtrace,vtrace);
vtrace.pop_back();
}// 構造一棵樹用來測試
treenode* createtree(vectorpre, vectormid)
private:
// 構造用於測試的樹
treenode* createtree(vectorpre, int pre_start, int pre_end,
vectormid, int mid_start, int mid_end)
}return node;
}};int main();
vectormid = ;
treenode* tree(nullptr);
tree = re.createtree(pre, mid);
int expect = 23;
cout << "-------------" << endl;
cout << "一共有 " << re.findpath(tree,expect).size() << " 條滿足條件的路徑,分別是: " << endl;
vector> result = re.findpath(tree,expect);
vectoraa = re.findpath(tree,expect)[0];
for (int i = 0; i < result.size(); ++i)
cout << endl;
}return 0;
}
二叉樹和為某一值的路徑
題目 二叉樹和為某一值的路徑 描述 輸入一顆二叉樹和乙個整數,列印出二叉樹中結點值的和為輸入整數的所有路徑。路徑定義為從樹的根結點開始往下一直到葉結點所經過的結點形成一條路徑。延伸 若要求路徑不一定非得從二叉樹的根節點或葉節點開始或結束,求所有節點數值總和等於某個給定值的所有路徑。找出二叉樹中所有滿...
二叉樹和為某一值的路徑
此題的路徑是從根到葉子節點,包含這兩個本身 class solution 返回二維列表,內部每個列表表示找到的路徑 def findpath self,root,expectnumber write code here 必須根到葉節點,包括根和葉子節點 前序遍歷非遞迴法 if root none r...
二叉樹為某一值的路徑
題目 輸入一顆二叉樹的根節點和乙個整數,列印出二叉樹中結點值的和為輸入整數的所有路徑。路徑定義為從樹的根結點開始往下一直到葉結點所經過的結點形成一條路徑。注意 在返回值的list中,陣列長度大的陣列靠前 思路 深度優先搜尋。使用前序遍歷,使用兩個全域性變數result和tmp,result來存放最終...