From 42f40f8c58d6826d4336157e14e167dd1d7fa9aa Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=83=91=E6=B1=89=E5=8D=BF?= <15176331678@163.com> Date: Wed, 22 May 2019 11:57:07 +0800 Subject: [PATCH 01/10] 22 --- "Tree/\345\256\266_98.md" | 15 +++++++++++++++ 1 file changed, 15 insertions(+) create mode 100644 "Tree/\345\256\266_98.md" diff --git "a/Tree/\345\256\266_98.md" "b/Tree/\345\256\266_98.md" new file mode 100644 index 0000000..6d70652 --- /dev/null +++ "b/Tree/\345\256\266_98.md" @@ -0,0 +1,15 @@ +``` +/** + * 作者:家 + * 思路:深度优先把节点都判断一下就好 + * 时间复杂度:O(n) + * 空间复杂度:O(n) + */ +class Solution: + def isValidBST(self, root: TreeNode) -> bool: + def valid(root: TreeNode, m:int ,l: int) -> bool: + if root == None : return True + if root.val >= m or root.val <= l : return False + return valid(root.left, root.val,l) and valid(root.right, m,root.val) + return valid(root,2 << 31, -2 << 31) +``` \ No newline at end of file -- Gitee From 9847da0e9bcb94afcf999cd2b44d09e252c33a2f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=83=91=E6=B1=89=E5=8D=BF?= <15176331678@163.com> Date: Wed, 22 May 2019 11:57:31 +0800 Subject: [PATCH 02/10] =?UTF-8?q?new=20dir=20=E5=AE=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- "Tree/\345\256\266/.keep" | 0 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 "Tree/\345\256\266/.keep" diff --git "a/Tree/\345\256\266/.keep" "b/Tree/\345\256\266/.keep" new file mode 100644 index 0000000..e69de29 -- Gitee From f28c3936ad135215e42bbc2a465f41c35977130a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=83=91=E6=B1=89=E5=8D=BF?= <15176331678@163.com> Date: Wed, 22 May 2019 11:57:47 +0800 Subject: [PATCH 03/10] =?UTF-8?q?=E9=87=8D=E5=91=BD=E5=90=8D=E6=96=87?= =?UTF-8?q?=E4=BB=B6Tree/=E5=AE=B6=5F98.md=E4=B8=BATree/=E5=AE=B6/?= =?UTF-8?q?=E5=AE=B6=5F98.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../\345\256\266_98.md" => "Tree/\345\256\266/\345\256\266_98.md" | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename "Tree/\345\256\266_98.md" => "Tree/\345\256\266/\345\256\266_98.md" (100%) diff --git "a/Tree/\345\256\266_98.md" "b/Tree/\345\256\266/\345\256\266_98.md" similarity index 100% rename from "Tree/\345\256\266_98.md" rename to "Tree/\345\256\266/\345\256\266_98.md" -- Gitee From 167cdc3553f383e28128e63c4a4ee11ed5e74193 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=83=91=E6=B1=89=E5=8D=BF?= <15176331678@163.com> Date: Wed, 22 May 2019 12:00:27 +0800 Subject: [PATCH 04/10] 222 --- "Tree/\345\256\266/\345\256\266_235.md" | 15 +++++++++++++++ 1 file changed, 15 insertions(+) create mode 100644 "Tree/\345\256\266/\345\256\266_235.md" diff --git "a/Tree/\345\256\266/\345\256\266_235.md" "b/Tree/\345\256\266/\345\256\266_235.md" new file mode 100644 index 0000000..054b61d --- /dev/null +++ "b/Tree/\345\256\266/\345\256\266_235.md" @@ -0,0 +1,15 @@ +``` +/** + * 作者:家 + * 思路:毕竟是二叉搜索树,按照当前节点跟左右孩子的大小关系就可以找到公共祖先 + * 时间复杂度:O(n) + * 空间复杂度:O(n) + */ +class Solution: + def lowestCommonAncestor(self, root: 'TreeNode', p: 'TreeNode', q: 'TreeNode') -> 'TreeNode': + if p.val > root.val < q.val: + return self.lowestCommonAncestor(root.right, p, q) + elif p.val < root.val > q.val: + return self.lowestCommonAncestor(root.left, p, q) + else: return root +``` \ No newline at end of file -- Gitee From f9955e10350afbc8d0044b6c0f8b17fb4a785d5b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=83=91=E6=B1=89=E5=8D=BF?= <15176331678@163.com> Date: Wed, 22 May 2019 12:03:27 +0800 Subject: [PATCH 05/10] 22 --- "Tree/\345\256\266/\345\256\266_236.md" | 14 ++++++++++++++ 1 file changed, 14 insertions(+) create mode 100644 "Tree/\345\256\266/\345\256\266_236.md" diff --git "a/Tree/\345\256\266/\345\256\266_236.md" "b/Tree/\345\256\266/\345\256\266_236.md" new file mode 100644 index 0000000..573cff2 --- /dev/null +++ "b/Tree/\345\256\266/\345\256\266_236.md" @@ -0,0 +1,14 @@ +``` +/** + * 作者:家 + * 思路:二叉树,递归结构是如果当前节点的左右各有p、q其中一个,那么当前就是公共祖先,如果其中一边有两个,那么直接去那一边找。 + * 时间复杂度:O(n) + * 空间复杂度:O(n) + */ +class Solution: + def lowestCommonAncestor(self, root: 'TreeNode', p: 'TreeNode', q: 'TreeNode') -> 'TreeNode': + if root in [None,p,q] : return root + left = self.lowestCommonAncestor(root.left, p, q) + right = self.lowestCommonAncestor(root.right, p, q) + return right if left == None else left if right == None else root +``` \ No newline at end of file -- Gitee From 24a6d57b6da48b92925ac2794c4ca76961ed2aad Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=83=91=E6=B1=89=E5=8D=BF?= <15176331678@163.com> Date: Wed, 22 May 2019 12:05:26 +0800 Subject: [PATCH 06/10] 222 --- "Tree/\345\256\266/\345\256\266_226.md" | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) create mode 100644 "Tree/\345\256\266/\345\256\266_226.md" diff --git "a/Tree/\345\256\266/\345\256\266_226.md" "b/Tree/\345\256\266/\345\256\266_226.md" new file mode 100644 index 0000000..187bee9 --- /dev/null +++ "b/Tree/\345\256\266/\345\256\266_226.md" @@ -0,0 +1,17 @@ +``` +/** + * 作者:家 + * 思路:前序后序遍历都行,遍历的同时把当前节点的左右孩子换一下就行。 + * 时间复杂度:O(n) + * 空间复杂度:O(n) + */ +func invertTree(root *TreeNode) *TreeNode { + if root == nil { + return root + } + root.Left,root.Right = root.Right,root.Left + invertTree(root.Left) + invertTree(root.Right) + return root +} +``` \ No newline at end of file -- Gitee From 52a86b72788ac9b170860065cd4cd9ac8e2f4a64 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=83=91=E6=B1=89=E5=8D=BF?= <15176331678@163.com> Date: Wed, 22 May 2019 12:07:59 +0800 Subject: [PATCH 07/10] 222 --- "Tree/\345\256\266/\345\256\266_94.md" | 26 ++++++++++++++++++++++++++ 1 file changed, 26 insertions(+) create mode 100644 "Tree/\345\256\266/\345\256\266_94.md" diff --git "a/Tree/\345\256\266/\345\256\266_94.md" "b/Tree/\345\256\266/\345\256\266_94.md" new file mode 100644 index 0000000..099f21e --- /dev/null +++ "b/Tree/\345\256\266/\345\256\266_94.md" @@ -0,0 +1,26 @@ +``` +/** + * 作者:家 + * 思路:用一个队列玩就行。 + * 时间复杂度:O(n) + * 空间复杂度:O(n) + */ +func inorderTraversal(root *TreeNode) []int { + s := []*TreeNode{} + re := []int{} + for { + for root != nil { + s = append(s,root) + root = root.Left + } + if len(s) == 0 { + return re + } + l := len(s)-1 + re = append(re,s[l].Val) + root = s[l].Right + s = s[:l] + } + return re +} +``` \ No newline at end of file -- Gitee From cbdeb65c623f8b62ef8684714e89e5b43188bbd8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=83=91=E6=B1=89=E5=8D=BF?= <15176331678@163.com> Date: Wed, 22 May 2019 12:09:28 +0800 Subject: [PATCH 08/10] 222 --- "Tree/\345\256\266/\345\256\266_144.md" | 26 +++++++++++++++++++++++++ 1 file changed, 26 insertions(+) create mode 100644 "Tree/\345\256\266/\345\256\266_144.md" diff --git "a/Tree/\345\256\266/\345\256\266_144.md" "b/Tree/\345\256\266/\345\256\266_144.md" new file mode 100644 index 0000000..d5ebecd --- /dev/null +++ "b/Tree/\345\256\266/\345\256\266_144.md" @@ -0,0 +1,26 @@ +``` +/** + * 作者:家 + * 思路:用一个队列玩就行。 + * 时间复杂度:O(n) + * 空间复杂度:O(n) + */ +func preorderTraversal(root *TreeNode) []int { + s := []*TreeNode{} + re := []int{} + for { + for root != nil { + re = append(re,root.Val) + s = append(s,root) + root = root.Left + } + l := len(s) + if l == 0 { + return re + } + root = s[l-1].Right + s = s[:l-1] + } + return re +} +``` \ No newline at end of file -- Gitee From 4685a78ad1a3b5dd50e8e3e5dadb66626ec3a6ec Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=83=91=E6=B1=89=E5=8D=BF?= <15176331678@163.com> Date: Wed, 22 May 2019 12:14:04 +0800 Subject: [PATCH 09/10] 222 --- "Tree/\345\256\266/\345\256\266_145.md" | 31 +++++++++++++++++++++++++ 1 file changed, 31 insertions(+) create mode 100644 "Tree/\345\256\266/\345\256\266_145.md" diff --git "a/Tree/\345\256\266/\345\256\266_145.md" "b/Tree/\345\256\266/\345\256\266_145.md" new file mode 100644 index 0000000..24f77a7 --- /dev/null +++ "b/Tree/\345\256\266/\345\256\266_145.md" @@ -0,0 +1,31 @@ +``` +/** + * 作者:家 + * 思路:三个里最难的一个,有个技巧,因为后序就是【左右根】,那么我们可以先序的【根右左】遍历,然后反转结果就好。 + * 时间复杂度:O(n) + * 空间复杂度:O(n) + */ +func postorderTraversal(root *TreeNode) []int { + s := []*TreeNode{} + re := []int{} + for { + for root != nil { + re = append(re,root.Val) + s = append(s,root) + root = root.Right + } + l := len(s) + if l == 0 { + res := make([]int,len(re)) + for i:=0; i Date: Wed, 22 May 2019 12:17:51 +0800 Subject: [PATCH 10/10] 222 --- "Tree/\345\256\266/\345\256\266_124.md" | 32 +++++++++++++++++++++++++ 1 file changed, 32 insertions(+) create mode 100644 "Tree/\345\256\266/\345\256\266_124.md" diff --git "a/Tree/\345\256\266/\345\256\266_124.md" "b/Tree/\345\256\266/\345\256\266_124.md" new file mode 100644 index 0000000..103eb0c --- /dev/null +++ "b/Tree/\345\256\266/\345\256\266_124.md" @@ -0,0 +1,32 @@ +``` +/** + * 作者:家 + * 思路:深度优先就好。 + * 时间复杂度:O(n) + * 空间复杂度:O(n) + */ +func maxPathSum(root *TreeNode) int { + re := -2 << 31 + dfs := func(*TreeNode) int { + return 0 + } + dfs = func(root *TreeNode) int { + if root == nil { + return 0 + } + left := max(0,dfs(root.Left)) + right := max(0,dfs(root.Right)) + re = max(re, left+right+root.Val) + return max(left,right)+root.Val + } + dfs(root) + return re +} + +func max(a,b int)int { + if a > b { + return a + } + return b +} +``` \ No newline at end of file -- Gitee