題目:輸入一顆二叉樹和乙個整數,列印出二叉樹中借點值得和為輸入整數的所有路徑。
從樹的根結點開始往下一直到葉結點所經過的結點形成一條路徑。
二叉樹結點定義:
1我們以二叉樹:struct
binarytreenode
2
1為例,當我們想要找到值為21的路徑的時候。82 /\46
106 / \ /\85
7 911
步驟如下:
1.收到從根元素開始尋找路徑,則在二叉樹的三種遍歷順序中只有前序遍歷
滿足條件。
2.接下來向左子樹遍歷到元素6,此時8+6=14仍然不等於21
3.繼續向左子樹遍歷到元素5,此時8+6+5=19
4.發現此時元素5已經是葉子節點了,則退回到元素6,向右節點遍歷到
元素7,此時8+6+7=21滿足條件輸出8,6,7
5.繼續用同樣的方式遞迴該二叉樹的右子樹即可。
這裡儲存路徑的資料結構可以是stack可以是vector,用vector的原因是
方便輸出
**實現如下:
1 #include 2 #include執行截圖:3 #include 4
using
namespace
std;56
struct
binarytreenode7;
1213
void createtree(binarytreenode**root)
1422
else
2329}30
3132
void preorder(binarytreenode*root)
3341
4243
void findpath(binarytreenode* root,vector& vecpath,int sum,int
nowsum)
4456 cout<
5859
if(root->m_pleft!=null)
6063
64if(root->m_pright!=null)
6568
vecpath.pop_back();69}
7071
72void findpathofnumber(binarytreenode* root,int
sum)
7381
8283
intmain()
84
面試題25 二叉樹中和為某一值的路徑
輸入一棵二叉樹和乙個整數,列印出二叉樹中結點值的和為輸入整數的所有路徑。從根的根結點開始往下一直到葉節點 所經過的結點形成一條路徑。include include using namespace std 二叉樹結點定義 struct binarytreenode 建立二叉樹結點 binarytree...
面試題25 二叉樹中和為某一值的路徑
以先序的方式構建二叉樹,輸入 表示結點為空 void createbinarytree binarytreenode proot else void printinorder binarytreenode proot int tmain intargc,tchar argv 說明 用vector模擬...
面試題25 二叉樹中和為某一值的路徑
輸入一顆二叉樹和乙個整數,列印出二叉樹中結點值的和為輸入整數的所有路徑。路徑定義為從樹的根結點開始往下一直到葉結點所經過的結點形成一條路徑。演算法思路 先序遍歷二叉樹,並用乙個vector模擬乙個棧,記錄路徑,將訪問過的結點的值放入,遍歷的時候先計算當前路徑上結點值的總和,並將結點的值放入vecto...