From 4c0d5cfd1ba9b1632ce21d149d84d68630a52f8f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9C=B1=E6=AF=85=E9=AA=8F?= Date: Tue, 13 Apr 2021 08:59:49 +0800 Subject: [PATCH] =?UTF-8?q?'=E6=B7=BB=E5=8A=A0=E4=BA=8C=E5=8F=89=E6=A0=91/?= =?UTF-8?q?=E6=B1=82=E6=B7=B1=E5=BA=A6=EF=BC=8C=E9=AA=8C=E8=AF=81=E4=BA=8C?= =?UTF-8?q?=E5=8F=89=E6=90=9C=E7=B4=A2=E6=A0=91'?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- leetcode/初级算法/树/二叉树的最大深度/main.go | 41 +++++++++++++ leetcode/初级算法/树/验证二叉搜索树/main.go | 47 +++++++++++++++ leetcode/初级算法/链表/回文链表/main.go | 60 +++++++++++++++++++ leetcode/初级算法/链表/环形链表/main.go | 33 ++++++++++ 4 files changed, 181 insertions(+) create mode 100644 leetcode/初级算法/树/二叉树的最大深度/main.go create mode 100644 leetcode/初级算法/树/验证二叉搜索树/main.go create mode 100644 leetcode/初级算法/链表/回文链表/main.go create mode 100644 leetcode/初级算法/链表/环形链表/main.go diff --git a/leetcode/初级算法/树/二叉树的最大深度/main.go b/leetcode/初级算法/树/二叉树的最大深度/main.go new file mode 100644 index 0000000..6e6ca32 --- /dev/null +++ b/leetcode/初级算法/树/二叉树的最大深度/main.go @@ -0,0 +1,41 @@ +package main +/** +给定一个二叉树,找出其最大深度。 + +二叉树的深度为根节点到最远叶子节点的最长路径上的节点数。 + +说明:叶子节点是指没有子节点的节点。 + +示例: +给定二叉树 [3,9,20,null,null,15,7], + + 3 + / \ + 9 20 + / \ + 15 7 +返回它的最大深度3 。 + */ + + type TreeNode struct { + Val int + Left *TreeNode + Right *TreeNode + } + +func maxDepth(root *TreeNode) int { + if root ==nil { + return 0 + } + maxRight:= maxDepth(root.Right) + maxLeft:= maxDepth(root.Left) + if maxRight > maxLeft { + return maxRight+1 + } else { + return maxLeft+1 + } +} +func main() { + t := &TreeNode{2, nil, &TreeNode{1, &TreeNode{2, nil, nil}, nil}} + print(maxDepth(t)) +} \ No newline at end of file diff --git a/leetcode/初级算法/树/验证二叉搜索树/main.go b/leetcode/初级算法/树/验证二叉搜索树/main.go new file mode 100644 index 0000000..d93f5aa --- /dev/null +++ b/leetcode/初级算法/树/验证二叉搜索树/main.go @@ -0,0 +1,47 @@ +package main +/** +给定一个二叉树,判断其是否是一个有效的二叉搜索树。 + +假设一个二叉搜索树具有如下特征: + +节点的左子树只包含小于当前节点的数。 +节点的右子树只包含大于当前节点的数。 +所有左子树和右子树自身必须也是二叉搜索树。 +示例1: +输入: + 2 + / \ + 1 3 +输出: true +示例2: +输入: + 5 + / \ + 1 4 + / \ + 3 6 +输出: false +解释: 输入为: [5,1,4,null,null,3,6]。 +根节点的值为 5 ,但是其右子节点值为 4 。 + */ + +type TreeNode struct { + Val int + Left *TreeNode + Right *TreeNode +} +func isValidBST(root *TreeNode) bool { + if root == nil { + return true + } + if root.Left !=nil && root.Left.Val <= root.Val || root.Right !=nil && root.Val <= root.Right.Val { + return true + } else { + return false + } + return isValidBST(root.Left) && isValidBST(root.Right) +} +func main() { + t := &TreeNode{2, &TreeNode{1, nil, nil}, &TreeNode{3, nil, nil}} + print(isValidBST(t)) +} \ No newline at end of file diff --git a/leetcode/初级算法/链表/回文链表/main.go b/leetcode/初级算法/链表/回文链表/main.go new file mode 100644 index 0000000..2d38a2f --- /dev/null +++ b/leetcode/初级算法/链表/回文链表/main.go @@ -0,0 +1,60 @@ +package main +/** +请判断一个链表是否为回文链表。 + +示例 1: + +输入: 1->2 +输出: false +示例 2: + +输入: 1->2->2->1 +输出: true + */ +type ListNode struct { + Val int + Next *ListNode +} +//慢 递归添加数组 +func isPalindrome2(head *ListNode) bool { + nums := []int{} + var getList func(head *ListNode,nums []int) []int + getList = func(head *ListNode,nums []int) []int { + nums = append(nums, head.Val) + if head==nil || head.Next == nil { + return nums + } + return getList(head.Next,nums) + } + nums = getList(head,nums) + start :=0 + end:= len(nums)-1 + for start