Golang Leetcode 450. Delete Node in a BST.go

时间:2022-06-19
本文章向大家介绍Golang Leetcode 450. Delete Node in a BST.go,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。

版权声明:原创勿转 https://blog.csdn.net/anakinsun/article/details/89175007

思路

递归操作,如果key值小于root,从左子树删除,大于root,从右子树删除,否则就删除root节点

code

type TreeNode struct {
	Val   int
	Left  *TreeNode
	Right *TreeNode
}

func deleteNode(root *TreeNode, key int) *TreeNode {
	if root == nil {
		return nil
	}
	if key < root.Val { //如果key小于root,从左子树删除
		root.Left = deleteNode(root.Left, key)
	} else if key > root.Val { //如果key大于root,从右子树删除
		root.Right = deleteNode(root.Right, key)
	} else { //删除root节点
		if root.Left == nil {
			return root.Right
		}
		if root.Right == nil {
			return root.Left
		}
		root.Val = findMin(root.Right)
		root.Right = deleteNode(root.Right, root.Val)
	}
	return root
}
func findMin(root *TreeNode) int {
	for root.Left != nil {
		root = root.Left
	}
	return root.Val
}