浏览 271 次
|
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
|---|---|
| 作者 | 正文 |
|
最后更新时间:2008-03-30
B树(二叉搜索树)定义:
1)、每个非叶子节点至多有两个子节点。 2)、每个节点都存储关键字值。 3)、其左子节点的关键字值小于该节点,且右子节点的关键字值大于或等于该节点。 简略代码实现: /** * 节点类 */ class Node{ public int key; public int data; public Node leftChild; public Node rightChild; public Node(int key, int data){ this.key = key; this.data = data; this.leftChild = null; this.rightChild = null; } public void display(){ System.out.println("key: " + key + ", data: " + data); } } /** * B树类 */ class Tree{ public Node root; public void insert(int key, int data){ Node newNode = new Node(key, data); if (root == null){ root = newNode; }else{ Node current = root; Node parent = null; while (true){ parent = current; if (key < current.key){ current = current.leftChild; if (current == null){ parent.leftChild = newNode; return; } }else{ current = current.rightChild; if (current == null){ parent.rightChild = newNode; return; } } } } } /** 只实现有一个节点的删除 */ public boolean delete(int key){ Node current = root; Node parent = null; boolean isLeftChild = false; while (current.key != key){ parent = current; if (key < current.key){ current = current.leftChild; isLeftChild = true; }else{ current = current.rightChild; isLeftChild = false; } } if (current == null){ return false; } /** 无子节点 */ if (current.leftChild == null && current.rightChild == null){ if (current == root){ root = null; }else if (isLeftChild){ parent.leftChild = null; }else{ parent.rightChild = null; } } /** 仅有右节点 */ else if ((current.leftChild == null && current.rightChild != null)){ if (current == root){ root = current.rightChild; }else if (isLeftChild){ parent.leftChild = current.rightChild; }else{ parent.rightChild = current.rightChild; } }else if ((current.leftChild != null && current.rightChild == null)){ if (current == root){ root = null; }else if (isLeftChild){ parent.leftChild = current.leftChild; }else{ parent.rightChild = current.leftChild; } } return true; } public Node find(int key){ Node current = root; while (current != null){ if (current.key == key){ break; }else if (key < current.key){ current = current.leftChild; }else{ current = current.rightChild; } } return current; } /** 中序 */ public void inOrder(Node localNode){ if (localNode != null){ inOrder(localNode.leftChild); System.out.println("key: " + localNode.key + ", data: " + localNode.data); inOrder(localNode.rightChild); } } } public class BTree { /** * @param args */ public static void main(String[] args) { // TODO Auto-generated method stub Tree newTree = new Tree(); newTree.insert(5, 5); newTree.insert(1, 1); newTree.insert(2, 2); newTree.insert(8, 8); newTree.insert(9, 9); newTree.insert(7, 7); newTree.delete(1); newTree.inOrder(newTree.root); } } 声明:JavaEye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
|
|
| 返回顶楼 | |


