面試題25 二叉樹中和為某一值的路徑

2022-07-26 14:21:09 字數 1469 閱讀 9861

題目:輸入一顆二叉樹和乙個整數,列印出二叉樹中借點值得和為輸入整數的所有路徑。

從樹的根結點開始往下一直到葉結點所經過的結點形成一條路徑。

二叉樹結點定義:

1

struct

binarytreenode

2

我們以二叉樹:

1

82 /\46

106  / \ /\85

7 911

為例,當我們想要找到值為21的路徑的時候。

步驟如下:

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...