Skip to content

Commit f7eb9ed

Browse files
committed
Chapter 07 section 05 C++ codes updated. Java codes added.
1 parent 17ea9fd commit f7eb9ed

File tree

2 files changed

+113
-10
lines changed
  • 07-Binary-Tree-and-Recursion

2 files changed

+113
-10
lines changed

07-Binary-Tree-and-Recursion/Course Code (C++)/05-Path-Sum-III/main.cpp

Lines changed: 29 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,11 @@
22

33
using namespace std;
44

5+
/// 437. Path Sum III
6+
/// https://leetcode.com/problems/path-sum-iii/description/
7+
/// 时间复杂度: O(n), n为树的节点个数
8+
/// 空间复杂度: O(h), h为树的高度
9+
510
/// Definition for a binary tree node.
611
struct TreeNode {
712
int val;
@@ -16,36 +21,50 @@ class Solution {
1621
// 在以root为根节点的二叉树中,寻找和为sum的路径,返回这样的路径个数
1722
int pathSum(TreeNode* root, int sum) {
1823

19-
if( root == NULL )
24+
if(root == NULL)
2025
return 0;
2126

22-
return findPath( root , sum )
23-
+ pathSum( root->left , sum )
24-
+ pathSum( root->right , sum );
27+
return findPath(root, sum)
28+
+ pathSum(root->left , sum)
29+
+ pathSum(root->right , sum);
2530
}
2631

2732
private:
2833

2934
// 在以node为根节点的二叉树中,寻找包含node的路径,和为sum
3035
// 返回这样的路径个数
31-
int findPath( TreeNode* node, int num){
36+
int findPath(TreeNode* node, int num){
3237

33-
if( node == NULL )
38+
if(node == NULL)
3439
return 0;
3540

3641
int res = 0;
37-
if( node->val == num )
42+
if(node->val == num)
3843
res += 1;
3944

40-
res += findPath( node->left , num - node->val );
41-
res += findPath( node->right , num - node->val );
45+
res += findPath(node->left , num - node->val);
46+
res += findPath(node->right , num - node->val);
4247

4348
return res;
4449
}
4550
};
4651

4752
int main() {
4853

54+
// 手动创建Leetcode题页上的测试用例。
55+
// 当然, 有更好的更智能的创建二叉树的方式, 有兴趣的同学可以自行研究编写程序:)
56+
57+
/*****************
58+
* 测试用例:
59+
*
60+
* 10
61+
* / \
62+
* 5 -3
63+
* / \ \
64+
* 3 2 11
65+
* / \ \
66+
* 3 -2 1
67+
*****************/
4968
TreeNode* node1 = new TreeNode(3);
5069
TreeNode* node2 = new TreeNode(-2);
5170

@@ -69,7 +88,7 @@ int main() {
6988
node9->left = node6;
7089
node9->right = node8;
7190

72-
cout<<Solution().pathSum( node9, 8)<<endl;
91+
cout << Solution().pathSum(node9, 8) << endl;
7392

7493
return 0;
7594
}
Lines changed: 84 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,84 @@
1+
/// 437. Path Sum III
2+
/// https://leetcode.com/problems/path-sum-iii/description/
3+
/// 时间复杂度: O(n), n为树的节点个数
4+
/// 空间复杂度: O(h), h为树的高度
5+
class Solution {
6+
7+
/// Definition for a binary tree node.
8+
public static class TreeNode {
9+
int val;
10+
TreeNode left;
11+
TreeNode right;
12+
TreeNode(int x) { val = x; }
13+
}
14+
15+
// 在以root为根节点的二叉树中,寻找和为sum的路径,返回这样的路径个数
16+
public int pathSum(TreeNode root, int sum) {
17+
18+
if(root == null)
19+
return 0;
20+
21+
return findPath(root, sum)
22+
+ pathSum(root.left , sum)
23+
+ pathSum(root.right , sum);
24+
}
25+
26+
// 在以node为根节点的二叉树中,寻找包含node的路径,和为sum
27+
// 返回这样的路径个数
28+
private int findPath(TreeNode node, int num){
29+
30+
if(node == null)
31+
return 0;
32+
33+
int res = 0;
34+
if(node.val == num)
35+
res += 1;
36+
37+
res += findPath(node.left , num - node.val);
38+
res += findPath(node.right , num - node.val);
39+
40+
return res;
41+
}
42+
43+
public static void main(String[] args) {
44+
45+
// 手动创建Leetcode题页上的测试用例。
46+
// 当然, 有更好的更智能的创建二叉树的方式, 有兴趣的同学可以自行研究编写程序:)
47+
48+
/*****************
49+
* 测试用例:
50+
*
51+
* 10
52+
* / \
53+
* 5 -3
54+
* / \ \
55+
* 3 2 11
56+
* / \ \
57+
* 3 -2 1
58+
*****************/
59+
TreeNode node1 = new TreeNode(3);
60+
TreeNode node2 = new TreeNode(-2);
61+
62+
TreeNode node3 = new TreeNode(3);
63+
node3.left = node1;
64+
node3.right = node2;
65+
66+
TreeNode node4 = new TreeNode(1);
67+
TreeNode node5 = new TreeNode(2);
68+
node5.right = node4;
69+
70+
TreeNode node6 = new TreeNode(5);
71+
node6.left = node3;
72+
node6.right = node5;
73+
74+
TreeNode node7 = new TreeNode(11);
75+
TreeNode node8 = new TreeNode(-3);
76+
node8.right = node7;
77+
78+
TreeNode node9 = new TreeNode(10);
79+
node9.left = node6;
80+
node9.right = node8;
81+
82+
System.out.println((new Solution()).pathSum(node9, 8));
83+
}
84+
}

0 commit comments

Comments
 (0)