- 分3种情况



| public class BinarySortTreeDemo { |
| public static void main(String[] args) { |
| int[] arr = {7, 3, 10, 12, 5, 1, 9, 2}; |
| BinarySortTree binarySortTree = new BinarySortTree(); |
| |
| for(int i = 0; i< arr.length; i++) { |
| binarySortTree.add(new Node(arr[i])); |
| } |
| |
| |
| System.out.println("中序遍历二叉排序树~"); |
| binarySortTree.infixOrder(); |
| |
| |
| binarySortTree.delNode(2); |
| System.out.println("删除结点后"); |
| binarySortTree.infixOrder(); |
| } |
| } |
| |
| |
| class BinarySortTree { |
| private Node root; |
| |
| |
| public Node search(int value) { |
| if(root == null) { |
| return null; |
| } else { |
| return root.search(value); |
| } |
| } |
| |
| |
| public Node searchParent(int value) { |
| if(root == null) { |
| return null; |
| } else { |
| return root.searchParent(value); |
| } |
| } |
| |
| |
| public void delNode(int value) { |
| if(root == null) { |
| return; |
| }else { |
| |
| Node targetNode = search(value); |
| |
| if(targetNode == null) { |
| return; |
| } |
| |
| if(root.left == null && root.right == null) { |
| root = null; |
| return; |
| } |
| |
| Node parent = searchParent(value); |
| |
| if(targetNode.left == null && targetNode.right == null) { |
| |
| if(parent.left != null && parent.left.value == value) { |
| parent.left = null; |
| } else if (parent.right != null && parent.right.value == value) { |
| parent.right = null; |
| } |
| } |
| } |
| } |
| |
| } |
| |
| |
| class Node { |
| int value; |
| Node left; |
| Node right; |
| |
| public Node(int value) { |
| this.value = value; |
| } |
| |
| @Override |
| public String toString() { |
| return "Node [value=" + value + "]"; |
| } |
| |
| |
| |
| |
| |
| |
| public Node search(int value) { |
| if(value == this.value) { |
| return this; |
| } else if(value < this.value) { |
| |
| if(this.left == null) { |
| return null; |
| } |
| return this.left.search(value); |
| } else { |
| if(this.right == null) { |
| return null; |
| } |
| return this.right.search(value); |
| } |
| } |
| |
| |
| |
| |
| |
| |
| public Node searchParent(int value) { |
| |
| if((this.left != null && this.left.value == value) || |
| (this.right != null && this.right.value == value)) { |
| return this; |
| } else { |
| |
| if(value < this.value && this.left != null) { |
| return this.left.searchParent(value); |
| } else if (value >= this.value && this.right != null) { |
| return this.right.searchParent(value); |
| } else { |
| return null; |
| } |
| } |
| } |
| |
| } |
| } else { |
| |
| if(targetNode.left != null) { |
| if(parent != null) { |
| |
| if(parent.left.value == value) { |
| parent.left = targetNode.left; |
| } else { |
| parent.right = targetNode.left; |
| } |
| } else { |
| root = targetNode.left; |
| } |
| } else { |
| if(parent != null) { |
| |
| if(parent.left.value == value) { |
| parent.left = targetNode.right; |
| } else { |
| parent.right = targetNode.right; |
| } |
| } else { |
| root = targetNode.right; |
| } |
| } |
| } |
| |
| |
| |
| |
| |
| |
| |
| public int delRightTreeMin(Node node) { |
| Node target = node; |
| |
| while(target.left != null) { |
| target = target.left; |
| } |
| |
| |
| delNode(target.value); |
| return target.value; |
| } |
| |
| } else if (targetNode.left != null && targetNode.right != null) { |
| int minVal = delRightTreeMin(targetNode.right); |
| targetNode.value = minVal; |
| # 在删除最后2个节点时,如果删除的是作为根节点的其中1个节点,就会判断父节点的值,这里需完善父节点为空的逻辑 |
| } else { |
| |
| if(targetNode.left != null) { |
| if(parent != null) { |
| |
| if(parent.left.value == value) { |
| parent.left = targetNode.left; |
| } else { |
| parent.right = targetNode.left; |
| } |
| } else { |
| root = targetNode.left; |
| } |
| } else { |
| if(parent != null) { |
| |
| if(parent.left.value == value) { |
| parent.left = targetNode.right; |
| } else { |
| parent.right = targetNode.right; |
| } |
| } else { |
| root = targetNode.right; |
| } |
| } |
| } |
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
· 字符编码:从基础到乱码解决
· 提示词工程——AI应用必不可少的技术