删除二叉树中某一个节点
在Java中删除二叉搜索树(Binary Search Tree, BST)中的某个节点,需要考虑几种情况,因为节点可能有0个、1个或2个子节点。以下是一个简单的示例实现,假设我们有一个Node类定义了二叉树节点:
class Node { int val; Node left; Node right; Node(int val) { this.val = val; } } public class BinaryTree { private Node root; // 删除节点的方法 public Node deleteNode(Node root, int key) { if (root == null) return null; // 首先在树中找到要删除的节点 if (key < root.val) { root.left = deleteNode(root.left, key); } else if (key > root.val) { root.right = deleteNode(root.right, key); } else { // 找到了要删除的节点 // 情况1: 节点是叶子节点 if (root.left == null && root.right == null) { return null; } // 情况2: 节点只有一个子节点 if (root.left == null) { return root.right; } if (root.right == null) { return root.left; } // 情况3: 节点有两个子节点 // 找到右子树的最小节点作为替换 Node minNode = findMin(root.right); root.val = minNode.val; // 替换值 root.right = deleteNode(root.right, minNode.val); // 删除右子树中的最小节点 } return root; } // 寻找右子树的最小节点 private Node findMin(Node node) { while (node.left != null) { node = node.left; } return node; } }
deleteNode
方法递归地在二叉搜索树中寻找要删除的节点。一旦找到,它会根据节点的子节点情况来决定如何重新构造树。如果要删除的节点有两个子节点,通常的做法是找到该节点右子树中的最小节点来替换当前节点的值,然后删除那个最小节点。这样可以保持二叉搜索树的性质。
收藏文章数量从多到少与“把书读薄”是一个道理
分类:
算法
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律