如何删除二叉树中的节点
发表于:2025-01-31 作者:千家信息网编辑
千家信息网最后更新 2025年01月31日,如何删除二叉树中的节点,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。算法:1.后驱算法:/*递归解法:1.找到需要删除的节点2.删除的节
千家信息网最后更新 2025年01月31日如何删除二叉树中的节点
如何删除二叉树中的节点,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。
算法:
1.后驱算法:
/*递归解法:1.找到需要删除的节点2.删除的节点只有右子树或者左子树,直接将右子树或者左子树的根节点当作这个删除的节点3.删除的节点左右子树都存在的情况下,左子树的最大节点也叫做前驱当作删除节点,或者将右子树的最小节点也就称作后驱当作删除节点。*/
2.前驱算法:
/*递归解法:1.找到需要删除的节点2.删除的节点只有右子树或者左子树,直接将右子树或者左子树的根节点当作这个删除的节点3.删除的节点左右子树都存在的情况下,左子树的最大节点也叫做前驱当作删除节点,或者将右子树的最小节点也就称作后驱当作删除节点。*/
题目:
后驱算法:
func deleteNode(root *TreeNode, key int) *TreeNode { if root == nil { return nil } if key < root.Val { root.Left = deleteNode(root.Left,key) return root } if key > root.Val { root.Right = deleteNode(root.Right,key) return root } // 这里通过递归已经找到了要删除的节点,此时因为递归的原因还是root这个指针 if root.Right == nil { return root.Left } if root.Left == nil { return root.Right } // 后驱的方法来替换当前节点 min := root.Right for min.Left != nil { min = min.Left } root.Val = min.Val // 替换需要删除的节点的数值,这里就是复制 root.Right = deleteMin(root.Right) // 这里把右子树中移动过来的那个最小节点删除掉 return root}func deleteMin(root *TreeNode) *TreeNode{ // 左子树不在的话,表示这个节点就是要删除的最小节点 // 存在两种情况,一:这个节点就是叶子节点,直接通过赋值为nil, 来当作删除节点。 // 二:这个节点没有左子树,只有右子树,这样的话,需要将右子树替换成该节点 if root.Left == nil { right := root.Right root.Right = nil return right } root.Left = deleteMin(root.Left) // 左子树一直在的话,就一直通过左子树去找最小节点 return root}
前驱算法
func deleteNode(root *TreeNode, key int) *TreeNode {
if root == nil {
return nil
}
if key < root.Val {
root.Left = deleteNode(root.Left,key)
return root
}
if key > root.Val {
root.Right = deleteNode(root.Right,key)
return root
}
// 这里通过递归已经找到了要删除的节点,此时因为递归的原因还是root这个指针
if root.Right == nil {
return root.Left
}
if root.Left == nil {
return root.Right
}
// 前驱的方法来替换当前节点
max := root.Left
for max.Right != nil {
max = max.Right
}
root.Val = max.Val
root.Left = deleteMax(root.Left)
return root
}
func deleteMax(root *TreeNode) *TreeNode {
if root.Right == nil {
left := root.Left
root.Left = nil
return left
}
root.Right = deleteMax(root.Right)
return root
}
/*
递归解法:
1.找到需要删除的节点
2.删除的节点只有右子树或者左子树,直接将右子树或者左子树的根节点当作这个删除的节点
3.删除的节点左右子树都存在的情况下,左子树的最大节点也叫做前驱当作删除节点,
或者将右子树的最小节点也就称作后驱当作删除节点。
*/
看完上述内容,你们掌握如何删除二叉树中的节点的方法了吗?如果还想学到更多技能或想了解更多相关内容,欢迎关注行业资讯频道,感谢各位的阅读!
节点
子树
递归
最小
前驱
算法
只有
情况
方法
最大
原因
就是
解法
内容
指针
更多
还是
问题
束手无策
为此
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
云度互联网科技有限
服务器里有什么神仙玩家
步步宝每天维修服务器吗
两个数据库合并查询
网络安全体会格式
阿南网络技术是什么
网络安全对国家有多重要
access数据库move
网络技术在政府管理中的应用
腾讯网络安全技术负责人
事前监测网络安全
java连数据库语句
数据库系统的安全控制方法
巴南区工商软件开发流程特点
国内主流数据库有哪些
标识属性数据库
互联网科技园区
连接服务器失败错误码10060
直销拆分软件开发
维普数据库还有那种检索途径
关于网络安全纪录片
英雄联盟网通大区哪个服务器最好
软件开发商的责任
服务器杀毒和安全
事前监测网络安全
数据库数据可用性是什么
服务器安全狗会屏蔽网站吗
人工智能网络技术龙头股
国家网络安全宣传周知识
市总工会网络安全宣传周成效