@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("查無該節點"); }
數據結構
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.