ARTS 打卡week07
每周完成一个 ARTS:
Algorithm: 每周至少做一个 LeetCode 的算法题
Review: 阅读并点评至少一篇英文技术文章
Tips: 学习至少一个技术技巧
Share: 分享一篇有观点和思考的技术文章
Algorithm
序号 | 题目名称 | 掌握程度 |
---|---|---|
0098 | 验证二叉搜索树 | 100% |
0235 | 二叉搜索树的最近公共祖先 | 100% |
0236 | 二叉树的最近公共祖先 | 100% |
验证二叉搜索树
给定一个二叉树,判断其是否是一个有效的二叉搜索 树。
假设一个二叉搜索树具有如下特征:
节点的左子树只包含小于当前节点的数。
节点的右子树只包含大于当前节点的数。
所有左子树和右子树自身必须也是二叉搜索树。
示例:
示例一:
输入:
2
/ \
1 3
输出: true
示例二:
输入:
5
/ \
1 4
/ \
3 6
输出: false
解释: 输入为: [5,1,4,null,null,3,6]。
根节点的值为 5 ,但是其右子节点值为 4 。
解析:
0098_validate_BST.go
/*
** in-ordering traverse binary search tree slice is a ordered slice
** using that propertity could validate binary search tree
*/
type TreeNode struct {
Val int
Left *TreeNode
Right *TreeNode
}
func isValidBST01(root *TreeNode) bool {
treeNodeValue, treeNodeStack := []int{
}, []*TreeNode{
}
if root == nil {
return true
}
if root.Left == nil && root.Right == nil {
return true
}
// inorder_travering
for root != nil || !isEmpty(treeNodeStack) {
for root != nil {
// push
treeNodeStack = append(treeNodeStack, root)
root = root.Left
}
if !isEmpty(treeNodeStack) {
// pop
tempNode := treeNodeStack[len(treeNodeStack)-1]
treeNodeStack = treeNodeStack[:len(treeNodeStack)-1]
treeNodeValue = append(treeNodeValue, tempNode.Val)
root = root.Right
}
}
for i := 0; i < len(treeNodeValue) - 1; i++ {
if treeNodeValue[i]