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、只記錄和
2、記錄路徑/*******************************************/*********************************************
author:tmw
date:2018-5-8
*********************************************/
#include #include typedef struct treenode
treenode;
bool haspathsum(treenode* root, int sum)
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 這個題目是二叉樹的遍歷問題,由於是從根節點出發的路徑,所以用先序遍歷。並且維護從當前節點到根節點的所有累加...