4 在二元樹中找出和為某一值的所有路徑

2021-05-26 14:56:58 字數 877 閱讀 9110

題目:輸入乙個整數和一棵二元樹。從樹的根結點開始往下訪問一直到葉結點所經過的所有結點形成一條路徑。

列印出和與輸入整數相等的所有路徑。

例如輸入整數22和如下二元樹

10/   \

5     12

/   \   

4     7  

則列印出兩條路徑:10, 12和10, 5, 7。

分析:考查對樹這種基本資料結構以及遞迴函式的理解。

當訪問到某一結點時,把該結點新增到路徑上,並累加當前結點的值。如果當前結點為葉結點並且當前路徑的和剛好等於輸入的整數,

則當前的路徑符合要求,我們把它列印出來。如果當前結點不是葉結點,則繼續訪問它的子結點。當前結點訪問結束後,遞迴函式將自動回到父結點。

因此我們在函式退出之前要在路徑上刪除當前結點並減去當前結點的值,以確保返回父結點時路徑剛好是根結點到父結點的路徑。

我們不難看出儲存路徑的資料結構實際上是乙個棧結構,因為路徑要與遞迴呼叫狀態一致,而遞迴呼叫本質就是乙個壓棧和出棧的過程。

#include#includeusing namespace std;

struct binarytreenode

;void creatbinarytree(binarytreenode * &r,int m)

if(m < r->m_value)

creatbinarytree(r->m_pleft,m);

if(m > r->m_value)

creatbinarytree(r->m_pright,m);

//if(m == r->m_value)

// cout<<"加入重複結點!"<&path)

int main()

4 在二元樹中找出和為某一值的所有路徑

4.在二元樹中找出和為某一值的所有路徑 題目 輸入乙個整數和一棵二元樹。從樹的根結點開始往下訪問一直到葉結點所經過的所有結點形成一條路徑。列印出和與輸入整數相等的所有路徑。例如輸入整數 22 和如下二元樹 10 5 12 4 7 則列印出兩條路徑 10,12 和 10,5,7。方法主要用回溯法和遞推...

NO 4在二元樹中找出和為某一值的所有路徑

題目部落格 題目 輸入乙個整數和一棵二元樹。從樹的根結點開始往下訪問一直到葉結點所經過的所有結點形成一條路徑。列印出和與輸入整數相等的所有路徑。例如 輸入整數22和如下二元樹 10 5 12 4 7 則列印出兩條路徑 10,12和10,5,7。二元樹節點的資料結構定義為 struct binaryt...

在二元樹中找出和為某一值的所有路徑

4.在二元樹中找出和為某一值的所有路徑 題目 輸入乙個整數和一棵二元樹。從樹的根結點開始往下訪問一直到葉結點所經過的所有結點形成一條路徑。列印出和與輸入整數相等的所有路徑。例如 輸入整數22和如下二元樹 10 5 12 4 7則列印出兩條路徑 10,12和10,5,7。c codes as belo...