代码随想录算法训练营Day25 | 669.修剪二叉搜索树、108.将有序数组转换为二叉搜索树、538.把二叉搜索树转换为累加树

76 阅读1分钟

LeetCode题目

669.修剪二叉搜索树

题目链接:Trim a Binary Search Tree - LeetCode

代码如下:

/**
 * Definition for a binary tree node.
 * type TreeNode struct {
 *     Val int
 *     Left *TreeNode
 *     Right *TreeNode
 * }
 */
func trimBST(root *TreeNode, low int, high int) *TreeNode {
	if root == nil {
		return nil
	}
	if root.Val < low {
		return trimBST(root.Right, low, high)
	}
	if root.Val > high {
		return trimBST(root.Left, low, high)
	}
	root.Left = trimBST(root.Left, low, high)
	root.Right = trimBST(root.Right, low, high)
	return root
}

108.将有序数组转换为二叉搜索树

题目链接:Convert Sorted Array to Binary Search Tree - LeetCode

代码如下:

/**
 * Definition for a binary tree node.
 * type TreeNode struct {
 *     Val int
 *     Left *TreeNode
 *     Right *TreeNode
 * }
 */
func traversal(nums []int, left, right int) *TreeNode {
	if left > right {
		return nil
	}
	mid := left + (right-left)/2
	root := &TreeNode{
		Val:   nums[mid],
		Left:  nil,
		Right: nil,
	}
	root.Left = traversal(nums, left, mid-1)
	root.Right = traversal(nums, mid+1, right)
	return root
}

func sortedArrayToBST(nums []int) *TreeNode {
	return traversal(nums, 0, len(nums)-1)
}

538.把二叉搜索树转换为累加树

题目链接:Convert BST to Greater Tree - LeetCode

代码如下:

/**
 * Definition for a binary tree node.
 * type TreeNode struct {
 *     Val int
 *     Left *TreeNode
 *     Right *TreeNode
 * }
 */
func convertBST(root *TreeNode) *TreeNode {
	pre := 0
	var convert func(cur *TreeNode)
	convert = func(cur *TreeNode) {
		if cur == nil {
			return
		}
		convert(cur.Right)
		cur.Val += pre
		pre = cur.Val
		convert(cur.Left)
	}
	convert(root)
	return root
}