給定乙個二叉樹與整數sum,找出所有從根節點到葉結點的路徑,這些路 徑上的節點值累加和為sum
即建立乙個二叉樹,要求二叉樹中有乙個路徑從根節點到葉節點到路徑加起來代表到和為 給定的sum
如下二叉樹
給定路徑之和為18,則需要輸出兩條路徑:
[1,4,5,8]
[1,4,6,7]
同樣,這個過程我們可以使用先序深度優先搜尋,同時需要使用臨時資料結構儲存搜尋過程**現的根節點,方便回溯。
實現過程如下:
void
getpath
(tree *root,
int&path_value,
int num,
std:
:vector<
int>
&path,
std:
:vector
:vector<
int>
>
&result)
/*搜尋的過程中計算和*/
path_value +
= root->data;
path.
push_back
(root->data)
;/*當訪問到了葉子節點,且滿足和為sum時,將最終的路徑path加入到路徑列表*/
if(root -> left ==
null
&& root ->left ==
null
&& path_value == num)
else
if(path_value > num)
/*搜尋左孩子*/
getpath
(root->left, path_value, num, path, result)
;/*搜尋右孩子*/
getpath
(root->right, path_value, num, path, result)
; path_value -
= root ->data;
path.
pop_back()
;}/*初始化並獲取返回值*/
std:
:vector
:vector<
int>>
pathsum
(tree *root,
int num)
測試**如下:
#include
#include
#include
#include
#include
#include
using namespace std;
typedef
struct tree
tree,
*treenode;
/*建立二叉樹*/
void
createtree
(treenode *root)
else
else}}
/*獲取指定和為sum的路徑*/
void
getpath
(tree *root,
int&path_value,
int num,
std:
:vector<
int>
&path,
std:
:vector
:vector<
int>
>
&result)
path_value +
= root->data;
path.
push_back
(root->data);if
(root -> left ==
null
&& root ->left ==
null
&& path_value == num)
else
if(path_value > num)
getpath
(root->left, path_value, num, path, result)
;getpath
(root->right, path_value, num, path, result)
; path_value -
= root ->data;
path.
pop_back()
;}/*初始化路徑*/
std:
:vector
:vector<
int>>
pathsum
(tree *root,
int num)
intmain
(int argc,
char
const
*ar**)
cout << endl;
}return0;
}
輸出如下:
construct the tree
123***458***67***
input sum path
18#輸出路徑
sum path is
[1][4]
[5][8]
[1][4]
[6][7]
二叉樹最大路徑之和
binary tree maximum path sum 解題思路 這道題是求樹的路徑和的題目,不過和平常不同的是這裡的路徑不僅可以從根到某乙個結點,而且路徑可以從左子樹某乙個結點,然後到達右子樹的結點,就像題目中所說的可以起始和終結於任何結點。在這裡樹沒有被看成有向圖,而是被當成無向圖來尋找路徑。...
二叉樹 路徑
二叉樹中,從根節點到葉節點的每一條連線,我們稱之為路徑,最短路徑和最長路徑在之前的部落格中,我們已經完成了對他們的討論,現在我們討論一下,輸出一棵二叉樹中全部的路徑資訊。如下所示 public class operation childbinarytreepath root,return resul...
Binary Tree Paths二叉樹路徑
問題描述 given a binary tree,return all root to leaf paths.給定乙個二叉樹,返回所有從根節點到葉子節點的路徑。思路 深度優先遍歷中的前序遍歷 給定子樹,先訪問根節點,再訪問左節點,最後訪問右節點 非遞迴的實現方式通過堆疊輔助。由於題目要求返回所有 根...