java实现二叉查找树

  
  
  1. /**
  2. * 二叉查找树:一列无序的int数组,通过二叉树查找方法创建我们需要的树,最后前序遍历得到有序的序列
  3. *
  4. * @author timmy1 实现步骤:第一个数字即为根节点:后面的元素通过比较数据的大小
  5. * 1.如果比当前节点数据域小,则查找该节点的左孩子,如果没有左孩子,则以该数据为节点创建左孩子。
  6. * 2.如果有左孩子,还需要进行比较,比节点数据域小,查找左孩子,比节点数据域大查找,查找右孩子,没有则创建,有的话进行比较
  7. */
  8. public class BinaryCheckTree {
  9. private TreeNode<Integer> root;
  10. private void createBinCheckTree(int i, int[] array) {
  11. if (i == array.length - 1)
  12. return;
  13. int data = array[i];
  14. TreeNode<Integer> newNode = new TreeNode<Integer>(data);
  15. TreeNode<Integer> node;
  16. if (root == null) {
  17. root = newNode;
  18. return;
  19. }
  20. node = root;
  21. // 节点与左右孩子的关系是左小右大
  22. while (node != null) {
  23. if (node.getData() > data) {// 数组元素比节点数据域小-》查找左节点
  24. if (node.leftChild != null) {
  25. node = node.leftChild;
  26. } else {
  27. node.leftChild = newNode;
  28. break;
  29. }
  30. } else {// 数组元素比节点数据域大-》查找右节点
  31. if (node.rightChild != null) {
  32. node = node.rightChild;
  33. } else {
  34. node.rightChild = newNode;
  35. break;
  36. }
  37. }
  38. }
  39. }
  40. public static void main(String[] args) {
  41. BinaryCheckTree tree = new BinaryCheckTree();
  42. int[] array = new int[] { 9, 23, 8, 10, 78, 13, 1, 5, 8, 32, 12 };
  43. for (int i = 0; i < array.length; i++) {
  44. tree.createBinCheckTree(i, array);
  45. }
  46. tree.printPreTra();
  47. }
  48. private void printPreTra() {
  49. TreeUtil.midTraversal(root);
  50. }
  51. }

结果打印:

pre Traversal:1

pre Traversal:5

pre Traversal:8

pre Traversal:8

pre Traversal:9

pre Traversal:10

pre Traversal:13

pre Traversal:23

pre Traversal:32

pre Traversal:78


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
二叉查找树(Binary Search Tree)是一种常见的数据结构,它的每个节点最多有两个子节点,左子节点的值小于父节点的值,右子节点的值大于父节点的值。Java 实现二叉查找树的代码如下: ``` public class BinarySearchTree { private Node root; private class Node { private int key; private Node left; private Node right; public Node(int key) { this.key = key; } } public void insert(int key) { root = insert(root, key); } private Node insert(Node x, int key) { if (x == null) { return new Node(key); } if (key < x.key) { x.left = insert(x.left, key); } else if (key > x.key) { x.right = insert(x.right, key); } return x; } public boolean contains(int key) { return contains(root, key); } private boolean contains(Node x, int key) { if (x == null) { return false; } if (key == x.key) { return true; } else if (key < x.key) { return contains(x.left, key); } else { return contains(x.right, key); } } public void delete(int key) { root = delete(root, key); } private Node delete(Node x, int key) { if (x == null) { return null; } if (key < x.key) { x.left = delete(x.left, key); } else if (key > x.key) { x.right = delete(x.right, key); } else { if (x.left == null) { return x.right; } else if (x.right == null) { return x.left; } else { Node t = x; x = min(t.right); x.right = deleteMin(t.right); x.left = t.left; } } return x; } private Node min(Node x) { if (x.left == null) { return x; } else { return min(x.left); } } private Node deleteMin(Node x) { if (x.left == null) { return x.right; } x.left = deleteMin(x.left); return x; } } ``` 这段代码实现二叉查找树的插入、查找和删除操作。其中,插入操作使用递归实现查找和删除操作也是递归实现的。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值