二叉樹路徑和 只記錄和 記錄路徑

2021-08-21 07:04:29 字數 1829 閱讀 6677

1、只記錄和給定一棵二叉樹和乙個和,確定樹是否有從根到葉的路徑,使得沿路徑加起來的所有值等於給定的總和。

【示例】

給定下面的二叉樹 以及待求和 sum = 22,

5/   \

4     8

/     /  \

11  13   4

/  \     \

7    2      1

返回 true, 因為存在乙個從根到葉的路徑:5->4->11->2 和為:22.

2、記錄路徑

給定乙個二叉樹和乙個和,找到每個路徑的總和等於給定總和的所有根到葉路徑。

【舉例】給定下面的二叉樹,以及和 sum = 22,

5/     \

4       8

/       /   \

11     13    4

/  \    /  \

7    2  5   1

返回:[

[5,4,11,2],

[5,8,4,5]

1、只記錄和幾個注意點:

1)題目要求返回true/false,不需要記錄路徑

2)給定結點沒說是正整數,因此必須走到葉子結點才知道是否找到,沒法剪枝,只能樸素深度搜尋

3)一旦找到sum結果,立即return

2、記錄路徑

dfs1、只記錄和

/*********************************************

author:tmw

date:2018-5-8

*********************************************/

#include #include typedef struct treenode

treenode;

bool haspathsum(treenode* root, int sum)

2、記錄路徑/*******************************************

author:tmw

date:2018-5-8

*******************************************/

#include #include typedef struct treenode

treenode;

/** *returnsize -- 返回的結果陣列有多少組

**columnsizes -- 返回的結果陣列每一組有多少個元素

*/#define max_size 1000

/** *cur_array : 用於暫存中間值

**result : 最終滿足和為sum的所有路徑

*colmn_size : 用於記錄每條路徑有多少元素

**/int i=0;

int count = 0;

int colmn_size[max_size];

void get_pathsum( treenode* root, int sum, int* cur_array, int** result )

int** pathsum(treenode* root, int sum, int** columnsizes, int* returnsize)

{ if( root == null ) return null;

/**自定義二維的結果陣列,用來儲存最終結果並返回**/

int** result = (int**)malloc(max_size*sizeof(int*));

int ii;

for( ii=0; ii夢想還是要有的,萬一實現了呢~~~ヾ(◍°∇°◍)ノ゙~~~~

二叉樹路徑和

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

二叉樹路徑和問題

今天回顧了一下二叉樹給定sum的問題,邏輯還是有問題,本以為對的,寫了如下的 bool haspathsum treenode root,int sum if path sum return true p s.top s.pop if p left null path p left val p p ...

二叉樹的路徑和

給定乙個二叉樹,找出所有路徑中各節點相加總和等於給定 目標值 的路徑。乙個有效的路徑,指的是從根節點到葉節點的路徑。給定乙個二叉樹,和 目標值 5 1 2 4 2 3 返回 1,2,2 1,4 這個題目是二叉樹的遍歷問題,由於是從根節點出發的路徑,所以用先序遍歷。並且維護從當前節點到根節點的所有累加...