自动做网站,医药销售网站开发背景,南宁小程序定制开发公司,wordpress发表文章失败type TreeNode struct { Val int Left *TreeNode Right *TreeNode
}
450. 删除二叉搜索树中的节点
/*本题比较难#xff0c;删除节点要分五种情况考虑
1.没有找到要删除的节点
2.找到要删除的节点是叶子节点
3.找到要删除的节点#xff0c;左指针不为空#xff0c;…type TreeNode struct { Val int Left *TreeNode Right *TreeNode
}
450. 删除二叉搜索树中的节点
/*本题比较难删除节点要分五种情况考虑
1.没有找到要删除的节点
2.找到要删除的节点是叶子节点
3.找到要删除的节点左指针不为空右指针为空
4.找到要删除的节点左指针为空右指针不为空
5.找到要删除的节点左指针不为空右指针不为空,这种情况最复杂需要调整二叉树结构既可以让左子树继承也可以让右子树继承
*/
//根据上述分析第五点让右子树继承写法
func deleteNode(root *TreeNode, key int) *TreeNode {
//1.未找到要删除的节点 if root nil { return root } if root.Val key { //2.找到要删除的节点是叶子节点 if root.Right nil root.Left nil { return nil // 3.找到要删除的节点左指针不为空右指针为空 } else if root.Left ! nil root.Right nil { return root.Left
//4.找到要删除的节点左指针为空右指针不为空 } else if root.Left nil root.Right ! nil { return root.Right } else { //5.找到要删除的节点左指针不为空右指针不为空,让右子树继承 cur : root.Right for cur.Left ! nil { cur cur.Left } cur.Left root.Left return root.Right } //因为是而二叉搜索树key比root值小向左递归 } else if key root.Val { root.Left deleteNode(root.Left, key)
//比root值大向右递归 } else if key root.Val { root.Right deleteNode(root.Right, key) } return root }
//第五点让左子树继承写法
func deleteNode(root *TreeNode, key int) *TreeNode { if root nil { return root } if root.Val key { if root.Right nil root.Left nil { return nil } else if root.Left ! nil root.Right ! nil { cur : root.Left for cur.Right ! nil { cur cur.Right } cur.Right root.Right return root.Left } else if root.Left ! nil { return root.Left } else { return root.Right } } else if key root.Val { root.Left deleteNode(root.Left, key) } else if key root.Val { root.Right deleteNode(root.Right, key) } return root }