Location via proxy:   [ UP ]  
[Report a bug]   [Manage cookies]                
Skip to content

Commit 041e88c

Browse files
authored
Merge pull request #2 from DSXiangLi/sandy
add new solution
2 parents 0ea08b3 + c86aa1c commit 041e88c

File tree

5 files changed

+151
-140
lines changed

5 files changed

+151
-140
lines changed

script/leetcode/editor/cn/doc/[124]二叉树中的最大路径和.py renamed to script/[124]二叉树中的最大路径和.py

Lines changed: 15 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -27,10 +27,11 @@
2727
# 提示:
2828
#
2929
#
30-
# 树中节点数目范围是 [1, 3 * 10⁴]
30+
# 树中节点数目范围是 [1, 3 * 104]
3131
# -1000 <= Node.val <= 1000
3232
#
33-
# Related Topics 树 深度优先搜索 动态规划 二叉树 👍 1657 👎 0
33+
# Related Topics 树 深度优先搜索 动态规划 二叉树
34+
# 👍 1663 👎 0
3435

3536

3637
# leetcode submit region begin(Prohibit modification and deletion)
@@ -42,4 +43,16 @@
4243
# self.right = right
4344
class Solution:
4445
def maxPathSum(self, root: Optional[TreeNode]) -> int:
46+
maxpath = -2**31
47+
48+
def dfs(root):
49+
nonlocal maxpath
50+
if not root:
51+
return 0
52+
left = max(dfs(root.left),0)
53+
right = max(dfs(root.right),0)
54+
maxpath = max(left+right+root.val, maxpath)
55+
return max(left, right) + root.val
56+
dfs(root)
57+
return maxpath
4558
# leetcode submit region end(Prohibit modification and deletion)

script/[654]最大二叉树.py

Lines changed: 71 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,71 @@
1+
# 给定一个不重复的整数数组 nums 。 最大二叉树 可以用下面的算法从 nums 递归地构建:
2+
#
3+
#
4+
# 创建一个根节点,其值为 nums 中的最大值。
5+
# 递归地在最大值 左边 的 子数组前缀上 构建左子树。
6+
# 递归地在最大值 右边 的 子数组后缀上 构建右子树。
7+
#
8+
#
9+
# 返回 nums 构建的 最大二叉树 。
10+
#
11+
#
12+
#
13+
# 示例 1:
14+
#
15+
#
16+
# 输入:nums = [3,2,1,6,0,5]
17+
# 输出:[6,3,5,null,2,0,null,null,1]
18+
# 解释:递归调用如下所示:
19+
# - [3,2,1,6,0,5] 中的最大值是 6 ,左边部分是 [3,2,1] ,右边部分是 [0,5] 。
20+
# - [3,2,1] 中的最大值是 3 ,左边部分是 [] ,右边部分是 [2,1] 。
21+
# - 空数组,无子节点。
22+
# - [2,1] 中的最大值是 2 ,左边部分是 [] ,右边部分是 [1] 。
23+
# - 空数组,无子节点。
24+
# - 只有一个元素,所以子节点是一个值为 1 的节点。
25+
# - [0,5] 中的最大值是 5 ,左边部分是 [0] ,右边部分是 [] 。
26+
# - 只有一个元素,所以子节点是一个值为 0 的节点。
27+
# - 空数组,无子节点。
28+
#
29+
#
30+
# 示例 2:
31+
#
32+
#
33+
# 输入:nums = [3,2,1]
34+
# 输出:[3,null,2,null,1]
35+
#
36+
#
37+
#
38+
#
39+
# 提示:
40+
#
41+
#
42+
# 1 <= nums.length <= 1000
43+
# 0 <= nums[i] <= 1000
44+
# nums 中的所有整数 互不相同
45+
#
46+
# Related Topics 栈 树 数组 分治 二叉树 单调栈
47+
# 👍 460 👎 0
48+
49+
50+
# leetcode submit region begin(Prohibit modification and deletion)
51+
# Definition for a binary tree node.
52+
# class TreeNode:
53+
# def __init__(self, val=0, left=None, right=None):
54+
# self.val = val
55+
# self.left = left
56+
# self.right = right
57+
class Solution:
58+
def constructMaximumBinaryTree(self, nums: List[int]) -> TreeNode:
59+
def dfs(start, end):
60+
if start>end:
61+
return None
62+
if start==end:
63+
return TreeNode(nums[start])
64+
maxval = max(nums[start:(end+1)])
65+
pos = nums.index(maxval)
66+
root=TreeNode(maxval)
67+
root.left = dfs(start, pos-1)
68+
root.right = dfs(pos+1, end)
69+
return root
70+
return dfs(0, len(nums)-1)
71+
# leetcode submit region end(Prohibit modification and deletion)

script/leetcode/editor/cn/doc/[110]平衡二叉树.py

Lines changed: 0 additions & 52 deletions
This file was deleted.

script/leetcode/editor/cn/doc/[173]二叉搜索树迭代器.py

Lines changed: 0 additions & 86 deletions
This file was deleted.

树总结.md

Lines changed: 65 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2273,6 +2273,71 @@ Tips
22732273
2. 外层递归加入是否遍历当前节点的选择,可以遍历可以不遍历,每一步只判断当前节点是否符合要求,并向下一个节点进行递归
22742274

22752275

2276+
### 437 路经总和III
2277+
2278+
给定一个二叉树的根节点 root ,和一个整数 targetSum ,求该二叉树里节点值之和等于 targetSum 的 路径 的数目。
2279+
2280+
路径 不需要从根节点开始,也不需要在叶子节点结束,但是路径方向必须是向下的(只能从父节点到子节点)。
2281+
2282+
2283+
2284+
示例 1:
2285+
2286+
输入:root = [10,5,-3,3,2,null,11,3,-2,null,1], targetSum = 8
2287+
输出:3
2288+
解释:和等于 8 的路径有 3 条,如图所示。
2289+
2290+
示例 2:
2291+
2292+
输入:root = [5,4,8,11,null,13,4,7,2,null,null,5,1], targetSum = 22
2293+
输出:3
2294+
2295+
2296+
2297+
提示:
2298+
2299+
二叉树的节点个数的范围是 [0,1000]
2300+
-109 <= Node.val <= 109
2301+
-1000 <= targetSum <= 1000
2302+
2303+
2304+
2305+
1. 两层递归
2306+
2307+
```python
2308+
# Definition for a binary tree node.
2309+
# class TreeNode:
2310+
# def __init__(self, val=0, left=None, right=None):
2311+
# self.val = val
2312+
# self.left = left
2313+
# self.right = right
2314+
class Solution:
2315+
def pathSum(self, root: TreeNode, targetSum: int) -> int:
2316+
if not root:
2317+
return 0
2318+
def dfs(root, target):
2319+
if not root:
2320+
return 0
2321+
if target==root.val:
2322+
mid = 1
2323+
else:
2324+
mid =0
2325+
left = dfs(root.left, target-root.val)
2326+
right = dfs(root.right, target-root.val)
2327+
return mid+left+right
2328+
return dfs(root, targetSum)+self.pathSum(root.left, targetSum)+ self.pathSum(root.right, targetSum)
2329+
2330+
```
2331+
2332+
2333+
2334+
Tips
2335+
2336+
1. 内层递归就是常规的路径求和,区别在于不再中间停止,只在中间记录等于target的路径进行累加
2337+
2. 外层递归加入是否遍历当前节点的选择,可以遍历可以不遍历,每一步只判断当前节点是否符合要求,并向下一个节点进行递归
2338+
2339+
2340+
22762341
### 450. 删除二叉搜索树中的节点.md
22772342
给定一个二叉搜索树的根节点 root 和一个值 key,删除二叉搜索树中的 key 对应的节点,并保证二叉搜索树的性质不变。返回二叉搜索树(有可能被更新)的根节点的引用。
22782343

0 commit comments

Comments
 (0)