同字母异序词判断
题目来源
LeetCode 98. Validate Binary Search Tree
解题思路
方法一
- 中序遍历后是否递增
方法二
- 递归
精简解题
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
|
func isValidBST(root *TreeNode) bool {
return helper(root, math.MinInt64, math.MaxInt64)
}
func helper(root *TreeNode, low, high int64) bool {
if root == nil {
return true
}
if int64(root.Val) <= low || int64(root.Val) >= high {
return false
}
return helper(root.Left, low, int64(root.Val)) && helper(root.Right, int64(root.Val), high)
}
|
最低公共父节点
题目来源
LeetCode 235. Lowest Common Ancestor of a Binary Search Tree
解题思路
- 由于二叉搜索树的性质,通过递归,判断给定节点值和当前节点的关系, 即可求得公共最低父节点
精简解题
1
2
3
4
5
6
7
8
9
10
11
12
13
|
func lowestCommonAncestor(root, p, q *TreeNode) *TreeNode {
return helper(root, p.Val, q.Val)
}
func helper(root *TreeNode, p, q int) *TreeNode {
r := root.Val
if r > p && r > q {
return helper(root.Left, p, q)
} else if r < p && r < q {
return helper(root.Right, p, q)
}
return root
}
|
最低公共父节点2
题目来源
LeetCode 236. Lowest Common Ancestor of a Binary Tree
解题思路
- 通过递归,判断给定节点和当前节点的关系
精简解题
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
|
func lowestCommonAncestor(root, p, q *TreeNode) *TreeNode {
return helper(root, p.Val, q.Val)
}
func helper(root *TreeNode, p, q int) *TreeNode {
if root == nil || root == p || root == q {
return root
}
l := helper(root.Left, p, q)
r := helper(root.Right, p, q)
if l != nil && r != nil {
return root
} else if l == nil {
return r
} else {
return l
}
return nil
}
|