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

2022-08-04 09:33:09 字數 868 閱讀 1606

時間限制:c/c++ 1秒,其他語言2秒 空間限制:c/c++ 32m,其他語言64m 

輸入一顆二叉樹的根節點和乙個整數,列印出二叉樹中結點值的和為輸入整數的所有路徑。路徑定義為從樹的根結點開始往下一直到葉結點所經過的結點形成一條路徑。(注意: 在返回值的list中,陣列長度大的陣列靠前)

思路:根據題意,可以想到通過使用深度優先遍歷對節點值進行相加與所輸入的整數進行對比,相等則存入vector容器中。

1、深度優先遍歷將節點加入path中(通過vector型別的path用於儲存所經過的節點)

2、若該結點是葉子結點則比較當前路徑和是否等於期待和,等於,則將path路徑加入到vector>容器中。

3、彈出結點,每一輪遞迴返回到父結點時,當前路徑也應該回退乙個結點(重要)

/*

struct treenode

};*/

class

solution

void find(treenode* root,int

sum)

path.pop_back();}};

這裡複習下,深度和廣度優先遍歷:

深度優先遍歷:先訪問根節點,再訪問左子樹最後再訪問右子樹。利用堆疊的先進後出的特性先將右子樹壓棧,再將左子樹壓棧,這樣就保證左子樹位於棧頂,先被訪問。

廣度優先遍歷(或者叫層次遍歷):從根節點開始沿著樹的寬度進行遍歷,也就是一層一層的訪問二叉樹的節點,利用佇列先進先出的特性來做。

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

include include using namespace std struct node void find path node r,int exceptedsum,vector path,int cursum node buildbtree int a,int i void preorder...

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

要輸出所有的路徑,必須額外用乙個棧來儲存當前路徑資訊。當訪問到節點a時,節點a的資訊要在訪問a的左右子樹時用到,因而,該資訊必須在遍歷a的左右子樹前加入到棧中,而在遍歷完a的左右子樹後從棧中移除。每訪問乙個節點,就計算當前路徑值 可直接利用父節點的路徑值 當其等於給定值且當前節點是葉子節點時,就列印...

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

面試題25 二叉樹中和為某一值的路徑 struct binarytreenode int value binarytreenode pleft binarytreenode pright 分析 用先序遍歷的方式遍歷二叉樹,初始時路徑為空。訪問乙個結點時若不到葉子結點且結點的和小於這個值那麼就把這個結...