码迷,mamicode.com
首页 > 编程语言 > 详细

java数据结构和算法------二叉排序树

时间:2015-07-08 00:08:45      阅读:212      评论:0      收藏:0      [点我收藏+]

标签:

  1 package iYou.neugle.search;
  2 
  3 public class BSTree_search {
  4     class BSTree {
  5         public int data;
  6         public BSTree left;
  7         public BSTree right;
  8     }
  9 
 10     public static void main(String[] args) {
 11         BSTree_search bst = new BSTree_search();
 12         int[] array = new int[] { 50, 30, 70, 10, 40, 90, 80 };
 13         BSTree bsTree = bst.CreateBSTree(array);
 14 
 15         bst.LDR_BST(bsTree);
 16 
 17         boolean bool = bst.SearchBSTree(bsTree, 10);
 18         System.out.println("10是否在二叉排序树中:" + bool);
 19 
 20         BSTree adjustBSTree = bst.DeleteBSTree(bsTree, 50);
 21         bst.LDR_BST(adjustBSTree);
 22     }
 23 
 24     // 创建二叉排序树
 25     public BSTree CreateBSTree(int[] array) {
 26         BSTree bsTree = null;
 27         for (int i = 0; i < array.length; i++) {
 28             if (bsTree == null) {
 29                 bsTree = new BSTree();
 30                 bsTree.data = array[i];
 31             } else {
 32                 this.InsertBSTree(bsTree, array[i]);
 33             }
 34         }
 35         return bsTree;
 36     }
 37 
 38     // 递归创建左右子树
 39     public void InsertBSTree(BSTree bsTree, int key) {
 40         if (bsTree.data > key) {
 41             if (bsTree.left == null) {
 42                 bsTree.left = new BSTree();
 43                 bsTree.left.data = key;
 44             } else {
 45                 InsertBSTree(bsTree.left, key);
 46             }
 47         } else {
 48             if (bsTree.right == null) {
 49                 bsTree.right = new BSTree();
 50                 bsTree.right.data = key;
 51             } else {
 52                 InsertBSTree(bsTree.right, key);
 53             }
 54         }
 55     }
 56 
 57     // 中序遍历(递归)
 58     public void LDR_BST(BSTree bsTree) {
 59         if (bsTree != null) {
 60             LDR_BST(bsTree.left);
 61             System.out.println(bsTree.data);
 62             LDR_BST(bsTree.right);
 63         }
 64     }
 65 
 66     // 在二叉排序树中查找元素是否存在
 67     public boolean SearchBSTree(BSTree bsTree, int key) {
 68         if (bsTree == null) {
 69             return false;
 70         }
 71         if (bsTree.data == key) {
 72             return true;
 73         }
 74         if (bsTree.data > key) {
 75             return SearchBSTree(bsTree.left, key);
 76         } else {
 77             return SearchBSTree(bsTree.right, key);
 78         }
 79     }
 80 
 81     // 删除二叉排序树中的节点
 82     public BSTree DeleteBSTree(BSTree bsTree, int key) {
 83         if (bsTree == null) {
 84             return null;
 85         }
 86 
 87         if (bsTree.data == key) {
 88             // 第一种情况:叶子节点
 89             if (bsTree.left == null && bsTree.right == null) {
 90                 bsTree = null;
 91             }
 92             // 第二种情况:节点有左子结点
 93             if (bsTree.left != null && bsTree.right == null) {
 94                 bsTree = bsTree.left;
 95             }
 96             // 第三种情况:节点有右子结点
 97             if (bsTree.left == null && bsTree.right != null) {
 98                 bsTree = bsTree.right;
 99             }
100             // 第四种情况:节点既有左子结点又有右子结点
101             if (bsTree.left != null && bsTree.right != null) {
102                 BSTree temp = bsTree.right;
103                 // 查找到右边节点中最左侧的节点
104                 while (temp.left != null) {
105                     temp = temp.left;
106                 }
107                 // 将左边节点赋给右边节点中最左侧的节点
108                 temp.left = bsTree.left;
109 
110                 bsTree = bsTree.right;
111             }
112 
113             return bsTree;
114         }
115 
116         if (bsTree.data > key) {
117             bsTree.left = DeleteBSTree(bsTree.left, key);
118         } else {
119             bsTree.right = DeleteBSTree(bsTree.right, key);
120         }
121 
122         return bsTree;
123     }
124 }

 

java数据结构和算法------二叉排序树

标签:

原文地址:http://www.cnblogs.com/niuxiaoha/p/4628763.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!