找出二叉樹中和為n的路徑

2021-09-06 11:28:23 字數 1273 閱讀 9210

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

與輸入整數相等的所有路徑。

從二叉樹的根節點出發,至二叉樹的葉子節點的一條直線,稱為二叉樹的一條路徑

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

10/  \

5 12

/  \

4  7

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

從二叉樹的根節點出發,並將該節點入棧,更新currentsum的值,再遍歷該節點的左子樹,直到葉子節點後,判斷currentsum的值,判斷與輸入值比較後,返回該葉子節點的父親節點,並彈出棧頂元素,繼續遍歷父親節點的右子樹,直到葉節點。重複以上步驟,知道所有節點遍歷完後。

#include #include "tree.h"

#include using namespace std;

void find(vector&, btnode*, int, int);

// 尋找路徑

void findpath(btnode *root, int pathsum)

void find(vector&path, btnode *root, int pathsum, int currentsum)

//遍歷該節點的左子樹

if(root->left!=null)

find(path, root->left, pathsum, currentsum);

//遍歷該節點的右子樹

if(root->right!=null)

find(path, root->right, pathsum, currentsum);

//在返回父節點之前,將父節點彈棧

path.pop_back();

}//測試

int main(void)

; btnode *root = null;

int pathsum = 22;

insert_node(&root, data, 1);

findpath(root, pathsum);

return 0;

}

struct btnode

;//先序建立二叉樹

void insert_node(btnode **root, int *data, int i)

}void remove_node(btnode *root)

}

(以上部分摘抄自《劍指offer>>)

二叉樹中和為指定值得路徑

輸入一棵二叉樹和乙個整數,列印出二叉樹中節點值的和為輸入整數的所有路徑。從樹的根節點開始往下一直到葉節點所經過的節點形成一條路徑。示例 給定如下二叉樹,以及目標和 sum 22,5 4 8 11 13 4 7 2 5 1 返回 5,4,11,2 5,8,4,5 definition for a bi...

劍指offer 找出二叉樹和為n的路徑

鍊錶和二叉樹比較難做,主要因其均以鏈相連線,next and left 來輸出結構中的資料,無法精確定位,所以通常用遞迴方法實現。通過遞迴方法,本人感覺最重要的是確定.next的這部中具體實現的操作,然後逐漸實現遞迴。找出二叉樹和為n的路徑,就針對每一步做加和操作以及記錄路徑,並判斷遞迴是否截至。下...

二叉樹中和為某一值得路徑

畫圖可以幫助我們理解,舉個簡單的例子可以看出儲存路徑的資料結構實際就是棧,而遞迴呼叫的本質就是壓棧和出棧的過程。include include include include using namespace std struct binarytreenode void findpath binary...