劍指Offer 34 二叉樹中和為某一值的路徑

2021-09-24 11:44:33 字數 2316 閱讀 2596

20.5.3 

最佳寫法:注意不要在新增了一條路徑後直接返回,任何乙個節點返回時都要從路徑中pop出去

class solution 

void dfs(treenode* root, int sum)

if(root->left) dfs(root->left, sum);

if(root->right) dfs(root->right, sum);

curpath.pop_back();

}private:

vectorcurpath;

vector> res;

};

1、注意路徑的定義:從根節點到葉子節點

2、節點值可正可負

class solution 

void pathsumcore(treenode* root, int sum, vectorcurpath)

else if(sum < 0)

if(root -> left) pathsumcore(root->left, sum, curpath);

if(root -> right) pathsumcore(root->right, sum, curpath);

}private:

//vectorcurpath;

vector> res;

};

這道題是我感覺開始刷題以來遇到的最麻煩的題之一了(自己太菜了……)

第一版**,完全按照書上的**寫的,測試用例通過:(陣列長度大的陣列靠前,這一點怎麼滿足的?) 

/*

struct treenode

};*/

class solution

vector> findpath(treenode* root,int expectnumber,vectorpath,int currsum)

if(root->left!=nullptr) findpath(root->left, expectnumber, path, currsum);

if(root->right!=nullptr) findpath(root->right, expectnumber, path, currsum);

path.pop_back();

return result;

}};

討論區里簡潔的c++寫法:

(值得學習的點:如何在遞迴返回時彈出當前點,就是在最後pop_back即可)

class solution 

tmp.pop_back();

}public:

vector> findpath(treenode* root,int expectnumber)

};

這類問題可以用帶記憶的dfs來解決。分享乙個這類問題的典型解法。

class solution 

void dfs(treenode* root,int s,vector> &ret,vector&trace)

if(root->left)

dfs(root->left,s-root->val,ret,trace);

if(root->right)

dfs(root->right,s-root->val,ret,trace);

trace.pop_back();

}};

討論區里的一種python寫法: 

```py

class solution:

# 返回二維列表,內部每個列表表示找到的路徑

def findpath(self, root, expectnumber):

# write code here

ret, trace = ,

if root:

self.dfs(root, expectnumber, ret, trace)

return ret

def dfs(self,root, n, ret, trace):

if (root.left == none) and (root.right == none):

if n == root.val:

if root.left:

self.dfs(root.left, n - root.val, ret, trace)

if root.right:

self.dfs(root.right, n - root.val, ret, trace)

trace.pop()

```

劍指Offer 34 二叉樹中和為某一值的路徑

題目描述 輸入一顆二叉樹和乙個整數,列印出二叉樹中結點值的和為輸入整數的所有路徑。路徑定義為從樹的根結點開始往下一直到葉結點所經過的結點形成一條路徑。struct treenode class solution void dfs treenode root,int s,vector ret,vect...

劍指Offer 34 二叉樹中和為某一值的路徑

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

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

1.判斷是不是空樹 2.遞迴結束的條件是葉子節點 3.考察二叉樹前序遍歷 coding utf 8 class treenode def init self,x self.val x self.left none self.right none class solution 返回二維列表,內部每個列...