@Override public Node add(Node node , int add) { //若遍历到空节点,node == null,则node == add //若add < node, 则递归其左子树 //若add > node, 则递归其右子树 //若add = node, 则直接返回 if (node!=null){ if (add > node.getContent()){ node.setRight(add(node.getRight(),add)); return node; } else if (add < node.getContent()) { node.setLeft(add(node.getLeft(),add)); return node; }else { return node; } }else { node = new Node(add,null,null); return node; } } @Override public Node delete(Node node , int delete) { //若待删除元素小于当前节点,则递归删除左子树 //若待删除元素大于当前节点,则递归删除右子树 //若待删除元素等于当前节点,则: // 1) 若当前节点为叶子节点,则直接返回null // 2) 若当前节点仅有一个儿子,则返回当前节点的儿子 // 3)若当前节点有两个儿子,则让其右子树最小元素的值替换该节点的值,然后在其右子树中递归删除最小节点 if(node == null){ throw new RuntimeException("树中不包含该元素"); }else if (delete < node.getContent()) { node.setLeft(delete(node.getLeft(),delete)); return node; }else if (delete > node.getContent()) { node.setRight(delete(node.getRight(),delete)); return node; }else { if (node.getLeft() == null && node.getRight() == null){ return null; }else if (node.getLeft() == null || node.getRight() == null){ return node.getLeft() == null? node.getRight():node.getLeft(); }else { Node rightMin = findMin(node.getRight()); node.setContent(rightMin.getContent()); node.setRight(delete(node.getRight(),rightMin.getContent())); return node; } } } @Override public Node search(Node node , int search) { //若node == null,直接返回 //若search > node,则查找其右子树 //若search < node,则查找其左子树 //若search == node,则返回查找节点 if (node != null) { if (search > node.getContent()) { return search(node.getRight(),search); } if (search < node.getContent()){ return search(node.getLeft(),search); } if (search == node.getContent()) { return node; } } throw new RuntimeException("查无该节点"); }
数据结构
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.