From 56d9af976a6df55808ebf8e834ed6cac7bfc38e1 Mon Sep 17 00:00:00 2001 From: X-shuffle <53906918+X-shuffle@users.noreply.github.com> Date: Sun, 13 Jun 2021 20:30:46 +0800 Subject: [PATCH 1/6] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=200106.=E4=BB=8E?= =?UTF-8?q?=E4=B8=AD=E5=BA=8F=E4=B8=8E=E5=90=8E=E5=BA=8F=E9=81=8D=E5=8E=86?= =?UTF-8?q?=E5=BA=8F=E5=88=97=E6=9E=84=E9=80=A0=E4=BA=8C=E5=8F=89=E6=A0=91?= =?UTF-8?q?=20go=E7=89=88=E6=9C=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 添加 0106.从中序与后序遍历序列构造二叉树 go版本 --- ...序与后序遍历序列构造二叉树.md | 64 +++++++++++++++++++ 1 file changed, 64 insertions(+) diff --git a/problems/0106.从中序与后序遍历序列构造二叉树.md b/problems/0106.从中序与后序遍历序列构造二叉树.md index ba2d46a1..600a38e0 100644 --- a/problems/0106.从中序与后序遍历序列构造二叉树.md +++ b/problems/0106.从中序与后序遍历序列构造二叉树.md @@ -693,6 +693,70 @@ class Solution: return root ``` Go: +> 106 从中序与后序遍历序列构造二叉树 + +```go +/** + * Definition for a binary tree node. + * type TreeNode struct { + * Val int + * Left *TreeNode + * Right *TreeNode + * } + */ +func buildTree(inorder []int, postorder []int) *TreeNode { + if len(inorder)<1||len(postorder)<1{return nil} + //先找到根节点(后续遍历的最后一个就是根节点) + nodeValue:=postorder[len(postorder)-1] + //从中序遍历中找到一分为二的点,左边为左子树,右边为右子树 + left:=findRootIndex(inorder,nodeValue) + //构造root + root:=&TreeNode{Val: nodeValue, + Left: buildTree(inorder[:left],postorder[:left]),//将后续遍历一分为二,左边为左子树,右边为右子树 + Right: buildTree(inorder[left+1:],postorder[left:len(postorder)-1])} + return root +} +func findRootIndex(inorder []int,target int) (index int){ + for i:=0;i 105 从前序与中序遍历序列构造二叉树 + +```go +/** + * Definition for a binary tree node. + * type TreeNode struct { + * Val int + * Left *TreeNode + * Right *TreeNode + * } + */ +func buildTree(preorder []int, inorder []int) *TreeNode { + if len(preorder)<1||len(inorder)<1{return nil} + left:=findRootIndex(preorder[0],inorder) + root:=&TreeNode{ + Val: preorder[0], + Left: buildTree(preorder[1:left+1],inorder[:left]), + Right: buildTree(preorder[left+1:],inorder[left+1:])} + return root +} +func findRootIndex(target int,inorder []int) int{ + for i:=0;i Date: Sun, 13 Jun 2021 20:48:38 +0800 Subject: [PATCH 2/6] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=200654.=E6=9C=80?= =?UTF-8?q?=E5=A4=A7=E4=BA=8C=E5=8F=89=E6=A0=91=20go=E7=89=88=E6=9C=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 添加 0654.最大二叉树 go版本 --- problems/0654.最大二叉树.md | 33 ++++++++++++++++++++++++++++++++ 1 file changed, 33 insertions(+) diff --git a/problems/0654.最大二叉树.md b/problems/0654.最大二叉树.md index ea8c15cd..f0d3e594 100644 --- a/problems/0654.最大二叉树.md +++ b/problems/0654.最大二叉树.md @@ -278,6 +278,39 @@ class Solution: Go: +> 654. 最大二叉树 + +```go +/** + * Definition for a binary tree node. + * type TreeNode struct { + * Val int + * Left *TreeNode + * Right *TreeNode + * } + */ +func constructMaximumBinaryTree(nums []int) *TreeNode { + if len(nums)<1{return nil} + //首选找到最大值 + index:=findMax(nums) + //其次构造二叉树 + root:=&TreeNode{ + Val: nums[index], + Left:constructMaximumBinaryTree(nums[:index]),//左半边 + Right:constructMaximumBinaryTree(nums[index+1:]),//右半边 + } + return root +} +func findMax(nums []int) (index int){ + for i:=0;inums[index]{ + index=i + } + } + return +} +``` + From 0e267fda96857c884f8cf920c20f00f4f5d1e6a3 Mon Sep 17 00:00:00 2001 From: X-shuffle <53906918+X-shuffle@users.noreply.github.com> Date: Sun, 13 Jun 2021 20:56:40 +0800 Subject: [PATCH 3/6] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=200739.=E6=AF=8F?= =?UTF-8?q?=E6=97=A5=E6=B8=A9=E5=BA=A6=20go=E7=89=88=E6=9C=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 添加 0739.每日温度 go版本 --- problems/0739.每日温度.md | 46 +++++++++++++++++++++++++++++++++++ 1 file changed, 46 insertions(+) diff --git a/problems/0739.每日温度.md b/problems/0739.每日温度.md index 1f91e42a..eeea6ead 100644 --- a/problems/0739.每日温度.md +++ b/problems/0739.每日温度.md @@ -214,6 +214,52 @@ Python: Go: +> 暴力法 + +```go +func dailyTemperatures(temperatures []int) []int { + length:=len(temperatures) + res:=make([]int,length) + for i:=0;i=temperatures[j]{//大于等于 + j++ + } + if j 单调栈法 + +```go +func dailyTemperatures(temperatures []int) []int { + length:=len(temperatures) + res:=make([]int,length) + stack:=[]int{} + for i:=0;i0&&temperatures[i]>temperatures[stack[len(stack)-1]]{ + res[stack[len(stack)-1]]=i-stack[len(stack)-1]//存放结果集 + stack=stack[:len(stack)-1]//删除stack[len(stack)-1]的元素 + } + //如果栈顶元素大于等于新来的元素,则加入到栈中。当栈内元素个数为0时,直接入栈 + if len(stack)==0||temperatures[i]<=temperatures[stack[len(stack)-1]]{ + stack = append(stack, i) + } + } + return res +} +``` From 01f87cc50566c9a171f6c828d1eb2b9f5828f646 Mon Sep 17 00:00:00 2001 From: X-shuffle <53906918+X-shuffle@users.noreply.github.com> Date: Sun, 13 Jun 2021 21:48:05 +0800 Subject: [PATCH 4/6] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=200617.=E5=90=88?= =?UTF-8?q?=E5=B9=B6=E4=BA=8C=E5=8F=89=E6=A0=91=20go=E7=89=88=E6=9C=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 添加 0617.合并二叉树 go版本 --- problems/0617.合并二叉树.md | 37 ++++++++++++++++++++++++++++++++ 1 file changed, 37 insertions(+) diff --git a/problems/0617.合并二叉树.md b/problems/0617.合并二叉树.md index d65275f0..be6bb425 100644 --- a/problems/0617.合并二叉树.md +++ b/problems/0617.合并二叉树.md @@ -332,6 +332,43 @@ class Solution: Go: +```go +/** + * Definition for a binary tree node. + * type TreeNode struct { + * Val int + * Left *TreeNode + * Right *TreeNode + * } + */ + //前序遍历(递归遍历,跟105 106差不多的思路) +func mergeTrees(t1 *TreeNode, t2 *TreeNode) *TreeNode { + var value int + var nullNode *TreeNode//空node,便于遍历 + nullNode=&TreeNode{ + Val:0, + Left:nil, + Right:nil} + switch { + case t1==nil&&t2==nil: return nil//终止条件 + default : //如果其中一个节点为空,则将该节点置为nullNode,方便下次遍历 + if t1==nil{ + value=t2.Val + t1=nullNode + }else if t2==nil{ + value=t1.Val + t2=nullNode + }else { + value=t1.Val+t2.Val + } + } + root:=&TreeNode{//构造新的二叉树 + Val: value, + Left: mergeTrees(t1.Left,t2.Left), + Right: mergeTrees(t1.Right,t2.Right)} + return root +} +``` From ac1e326cbf15017d2a98d53620016f3bb6069421 Mon Sep 17 00:00:00 2001 From: X-shuffle <53906918+X-shuffle@users.noreply.github.com> Date: Sun, 13 Jun 2021 22:17:57 +0800 Subject: [PATCH 5/6] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=200700.=E4=BA=8C?= =?UTF-8?q?=E5=8F=89=E6=90=9C=E7=B4=A2=E6=A0=91=E4=B8=AD=E7=9A=84=E6=90=9C?= =?UTF-8?q?=E7=B4=A2=20go=E7=89=88=E6=9C=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 添加 0700.二叉搜索树中的搜索 go版本 --- problems/0700.二叉搜索树中的搜索.md | 50 ++++++++++++++++++++ 1 file changed, 50 insertions(+) diff --git a/problems/0700.二叉搜索树中的搜索.md b/problems/0700.二叉搜索树中的搜索.md index 25a06617..16b21f26 100644 --- a/problems/0700.二叉搜索树中的搜索.md +++ b/problems/0700.二叉搜索树中的搜索.md @@ -241,6 +241,56 @@ class Solution: Go: +> 递归法 + +```go +/** + * Definition for a binary tree node. + * type TreeNode struct { + * Val int + * Left *TreeNode + * Right *TreeNode + * } + */ + //递归法 +func searchBST(root *TreeNode, val int) *TreeNode { + if root==nil||root.Val==val{ + return root + } + if root.Val>val{ + return searchBST(root.Left,val) + } + return searchBST(root.Right,val) +} +``` + +> 迭代法 + +```go +/** + * Definition for a binary tree node. + * type TreeNode struct { + * Val int + * Left *TreeNode + * Right *TreeNode + * } + */ + //迭代法 +func searchBST(root *TreeNode, val int) *TreeNode { + for root!=nil{ + if root.Val>val{ + root=root.Left + }else if root.Val Date: Mon, 14 Jun 2021 21:56:40 +0800 Subject: [PATCH 6/6] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=200530.=E4=BA=8C?= =?UTF-8?q?=E5=8F=89=E6=90=9C=E7=B4=A2=E6=A0=91=E7=9A=84=E6=9C=80=E5=B0=8F?= =?UTF-8?q?=E7=BB=9D=E5=AF=B9=E5=B7=AE=20go=E7=89=88=E6=9C=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 添加 0530.二叉搜索树的最小绝对差 go版本 --- .../0530.二叉搜索树的最小绝对差.md | 31 ++++++++++++++++++- 1 file changed, 30 insertions(+), 1 deletion(-) diff --git a/problems/0530.二叉搜索树的最小绝对差.md b/problems/0530.二叉搜索树的最小绝对差.md index 03c48d9c..0bbc4908 100644 --- a/problems/0530.二叉搜索树的最小绝对差.md +++ b/problems/0530.二叉搜索树的最小绝对差.md @@ -224,8 +224,37 @@ class Solution: return r ``` Go: +> 中序遍历,然后计算最小差值 - +```go +/** + * Definition for a binary tree node. + * type TreeNode struct { + * Val int + * Left *TreeNode + * Right *TreeNode + * } + */ +func getMinimumDifference(root *TreeNode) int { + var res []int + findMIn(root,&res) + min:=1000000//一个比较大的值 + for i:=1;i