【微軟面試一百題:4】在二元樹中找出和為某一值的所有路徑
題目:輸入一個整數和一棵二元樹。 從樹的根結點開始往下訪問一直到葉結點所經過的所有結點形成一條路徑。 列印出和與輸入整數相等的所有路徑。
例如輸入整數 22 和如下二元樹
10
/
5 12
/ \
4 7
則列印出兩條路徑:10, 12 和 10, 5, 7
hint: 藉助 陣列 模擬 Stack
#include <iostream>
#include <string>
using namespace std;
struct BSTreeNode
{
int value;
BSTreeNode *left;
BSTreeNode *right;
};
void AddBSTreeNode(BSTreeNode * &pCurrent,int value){
if (NULL==pCurrent) {
BSTreeNode * newNode = new BSTreeNode;
newNode->left=NULL;
newNode->right=NULL;
newNode->value = value;
pCurrent = newNode;
}else{
if (pCurrent->value>value) {
AddBSTreeNode(pCurrent->left, value);
}else if (pCurrent->value<value)
AddBSTreeNode(pCurrent->right, value);
}
}
void printPath(int path[],int size){
for (int i=0; i<size ; i++) {
cout<<path[i]<<endl;
}
cout<<endl;
}
void printRoute(BSTreeNode *root,int sum,int path[],int top){
path[top++]=root->value;
sum-=root->value;
if (root->left==NULL&&root->right==NULL) {
if (sum==0) {
printPath(path,top);
}
}else{
if (root->left!=NULL)
printRoute(root->left, sum, path, top);
if (root->right!=NULL)
printRoute(root->right, sum, path, top);
}
top--;
sum+=root->value;
}
int main()
{
BSTreeNode * root = NULL;
AddBSTreeNode(root, 10);
AddBSTreeNode(root, 5);
AddBSTreeNode(root, 4);
AddBSTreeNode(root, 7);
AddBSTreeNode(root, 12);
int path[100];
printRoute(root, 22, path, 0);
return 0;
}
相關文章
- 【演算法】在二元樹中找出和為某一值的所有路徑演算法
- 面試題34:二叉樹中和為某一值的路徑面試題二叉樹
- 二叉樹和為某種所有路徑二叉樹
- 【劍指offer】二叉樹中和為某一值的路徑二叉樹
- JZ-024-二叉樹中和為某一值的路徑二叉樹
- 劍指 Offer 34. 二叉樹中和為某一值的路徑(java解題)二叉樹Java
- 劍指 Offer 34. 二叉樹中和為某一值的路徑二叉樹
- 列印二叉樹的所有路徑二叉樹
- Python演算法和資料結構:在二叉樹中找到和為sum的所有路徑Python演算法資料結構二叉樹
- 【微軟面試題】在二叉搜尋樹中找最小的大於某個key值的節點微軟面試題
- (python版)《劍指Offer》JZ24:二叉樹中和為某一值的路徑Python二叉樹
- 程式設計有路,開源為徑程式設計
- 牛客題霸 [二叉樹中是否存在節點和為指定值的路徑] C++題解/答案二叉樹C++
- js面試題-找出字串中的數字,並替換為*JS面試題字串
- 【vue】在二叉樹中根據子節點找出父節點路徑Vue二叉樹
- Java或Web中解決所有路徑問題 (轉載)JavaWeb
- 二元函式的極值與最值問題函式
- vue專案中@符號沒有路徑提示Vue符號
- 257. Binary Tree Paths(列印二叉樹所有路徑)二叉樹
- 找出一堆整數中兩個元素和為指定值的所有組合
- 【谷歌面試題】找出二叉查詢樹中出現頻率最高的元素谷歌面試題
- 387,二叉樹中的最大路徑和二叉樹
- 前端面試題,寫出一個快速找出兩個陣列不同值的函式。前端面試題陣列函式
- 在陣列中尋找和為指定值的兩個數陣列
- LintCode 二叉樹中的最大路徑和二叉樹
- 124. 二叉樹中的最大路徑和二叉樹
- 在程式設計中為所欲為[聖誕版]程式設計
- 面試題((A)null).fun()——java中null值的強轉面試題NullJava
- 演算法資料結構試題——在陣列中找出已知和的組成數演算法資料結構陣列
- 我在微軟8個月所學到的微軟
- [leetcode/lintcode 題解] 微軟 面試題:實現 Trie(字首樹)LeetCode微軟面試題
- Linux中如何找出系統所支援的最大記憶體Linux記憶體
- 【谷歌面試題】找出字串中只包含兩種字元的最長子串谷歌面試題字串字元
- 前端面試題3----display的值和作用前端面試題
- 輕鬆搞定面試中的二叉樹題目面試二叉樹
- 面試官所認為的單例模式面試單例模式
- 面試題:MySQL索引為什麼用B+樹?面試題MySql索引
- [Python手撕]二叉樹中的最大路徑和Python二叉樹