二分查找法代码java,二叉搜索树java实现

  二分查找法代码java,二叉搜索树java实现

  00-1010 1.概念2。关键操作3。完全码

  00-1010A。它是一棵二叉树(每个节点最多有两个子节点)

  B.此树中节点的节点值

  左侧子树根节点中的所有节点值右侧子树中的所有节点值

  通常,在二分搜索法树中,相同的值(TreeMap-key)在JDK的搜索树中不存在,不管值相等的事实(元素不重复)。

  3360最大的特点也是判断是否是搜索树的方法。

  通过按中间顺序遍历树,我们可以得到一个升序集合0 1 2 3 4 5 6 7 8 9。

  有序区间上二分搜索法的时间复杂度?保持设置/2/2/2==1

  LogN="与“树”相关联

  

目录

 

  删除58时,该节点的左右子树不为空。

  Hibbard删除1962年

  在BST中删除一个带有左右子树的节点。

  找到当前根节点为58的前任或后继节点作为删除的新节点。

  前体3360是BST中根58 -53小于58的最后一个节点。

  后续: BST中大于58的第一个节点,根为58 -59

  当我们使用后继节点时,首先连接removeMin(root.right ),然后连接root.left

  TreeNode successor=find min(root . right);继承者. right=remove min(root . right);successor . left=root . left;

  

1.概念

导入Java . util . nosuchelementexception;/* * *基于整数的*普通二叉查找树*/public class BST { private class treenode { private intval;私有TreeNode left私有TreeNode权限;public TreeNode(int val){ this . val=val;} } private int size私有TreeNode根;/* * *插入新节点val * @ param val */public void add(intval){ root=add(root,val);} private treenode add(treenode root,intval){ if(root==null){//创建新节点treenode newnode=newtreenode(val);尺寸;返回newNode}//将if(valroot . val){ root . left=add(root . left,val)插入左侧子树;}//将if(valroot . val){ root . right=add(root . right,val)插入右边的子树中;}返回root}/* * *判断当前带root的BST是否包含val * @ param val * @ return */public boolean contains(intval){ return contains(root,val);} private boolean包含(TreeNode root,int val){ if(root==null){ return false;}如果找到(val==root.val){ //返回true}else if(val root.val){ //递归左子树查找返回包含(root.left,val);}否则{

 

   //递归右子树查找 return contains(root.right,val); } } /** * 找到最小值 * @return */ public int findMin(){ //判空 if(root == null){ //抛出一个空指针异常 throw new NoSuchElementException("root is empty! cannot find min"); } TreeNode minNode = findMin(root); return minNode.val; } private TreeNode findMin(TreeNode root) { //当此节点左子树为空,说明此节点是最小值 if(root.left == null){ return root; } //递归访问左子树 return findMin(root.left); } /** * 找到最大值 * @return */ public int findMax(){ //判空 if(root == null){ throw new NoSuchElementException("root is empty! cannot find max"); } TreeNode maxNode = findMax(root); return maxNode.val; } private TreeNode findMax(TreeNode root) { //当此节点右子树为空,说明此节点是最大值 if(root.right == null){ return root; } //递归访问右子树 return findMax(root.right); } /** * 在当前BST中删除最小值节点,返回删除的最小值 * @return */ public int removeMin(){ int min =findMin(); root = removeMin(root); return min; } private TreeNode removeMin(TreeNode root) { if(root.left == null){ TreeNode right = root.right; //找到最小值,删除节点 root = root.left = null; size--; return right; } root.left = removeMin(root.left); return root; } /** * 在当前BST中删除最大值节点,返回删除的最大值 * @return */ public int removeMax(){ int max = findMax(); root = removeMax(root); return max; } //在当前以root为根的BST中删除最小值所在的节点,返回删除后的树根 private TreeNode removeMax(TreeNode root) { if(root.right == null){ TreeNode right = root.right; //找到最大值,删除节点 root = root.right = null; size--; return right; } root.right = findMax(root.right); return root; } /** * 在当前以root为根节点的BST中删除值为val的节点 * 返回删除后的新的根节点 * @return */ public void removeValue(int value){ root = removeValue(root,value); } private TreeNode removeValue(TreeNode root, int value) { if(root == null){ throw new NoSuchElementException("root is empty! cannot find remove"); }else if(value < root.val){ root.left = removeValue(root.left,value); return root; }else if(value > root.val){ root.right = removeValue(root.right,value); return root; }else { //此时value == root.value if(root.left == null){ //删除最小数 TreeNode right = root.right; root = root.right = null; size--; return right; } if(root.right == null){ //删除最大数 TreeNode left = root.left; root = root.left =null; size--; return left; } //找到当前该删除节点的前驱或者后继节点作为删除后的新节点 //当我们使用后继节点时,先连removeMin(root.right),在连root.left TreeNode successor = findMin(root.right); successor.right = removeMin(root.right); successor.left = root.left; return successor; } } @Override public String toString() { StringBuilder sb = new StringBuilder(); generateBSTString(root,0,sb); return sb.toString(); } //直观打印,可以看到树的深度 private void generateBSTString(TreeNode root, int height, StringBuilder sb) { if(root == null){ sb.append(generateHeightString(height)).append("NULLn"); return; } sb.append(generateHeightString(height)).append(root.val).append("n"); generateBSTString(root.left,height+1,sb); generateBSTString(root.right,height+1,sb); } private String generateHeightString(int height) { StringBuilder sb = new StringBuilder(); for (int i = 0; i < height; i++) { sb.append("--"); } return sb.toString(); }}到此这篇关于Java实现二分搜索树的示例代码的文章就介绍到这了,更多相关Java二分搜索树内容请搜索盛行IT以前的文章或继续浏览下面的相关文章希望大家以后多多支持盛行IT!

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: