- 浏览: 787555 次
- 性别:
- 来自: 深圳
文章分类
最新评论
-
萨琳娜啊:
Java读源码之Netty深入剖析网盘地址:https://p ...
Netty源码学习-FileRegion -
飞天奔月:
写得有趣 ^_^
那一年你定义了一个接口 -
GoldRoger:
第二个方法很好
java-判断一个自然数是否是某个数的平方。当然不能使用开方运算 -
bylijinnan:
<script>alert("close ...
自己动手实现Java Validation -
paul920531:
39行有个bug:"int j=new Random ...
java-蓄水池抽样-要求从N个元素中随机的抽取k个元素,其中N无法确定
see also:http://blog.csdn.net/jiqiren007/article/details/6534810
import java.util.LinkedList; import ljn.help.*; public class OperationsOnBinarySearchTree { /** * It shows the operations on Binary Search Tree. * see also: http://blog.csdn.net/jiqiren007/article/details/6534810 */ private Node root; public static void main(String[] args) { int[] data={12,5,18,2,9,15,19,0,0,8,0,0,17,}; /* 12 / \ 5 18 / \ / \ 2 9 15 19 / \ 8 17 */ OperationsOnBinarySearchTree bst=new OperationsOnBinarySearchTree(data); bst.levelTraverse(); bst.insert(13); bst.levelTraverse(); bst.delete(13); bst.levelTraverse(); bst.delete(12); bst.levelTraverse(); bst.inOrder(bst.root); } public OperationsOnBinarySearchTree(int[] data){ root=Helper.createTree(data); } public void delete(int dataDelete){ if(root==null){ return; } Node curNode=root; NodePair pair=findNodeAndParent(curNode,dataDelete); Node nodeDelete=pair.son; Node parent=pair.parent; if(nodeDelete==null){ return; } if(isLeaf(nodeDelete)){ if(parent.getLeft()==nodeDelete){ parent.setLeft(null); } if(parent.getRight()==nodeDelete){ parent.setRight(null); } }else{ if( hasLeftOnly(nodeDelete) ){ if(parent.getLeft()==nodeDelete){ parent.setLeft(nodeDelete.getLeft()); } if(parent.getRight()==nodeDelete){ parent.setRight(nodeDelete.getLeft()); } }else if( hasRightOnly(nodeDelete) ){ if(parent.getLeft()==nodeDelete){ parent.setLeft(nodeDelete.getRight()); } if(parent.getRight()==nodeDelete){ parent.setRight(nodeDelete.getRight()); } }else{//has both left child and right child.Successor is in the min(curNode.getRight()) NodePair tmpPair=min(nodeDelete.getRight()); Node successor=tmpPair.son; Node sParent=tmpPair.parent; nodeDelete.setData(successor.getData()); if(null==sParent){ nodeDelete.setRight(null); }else{ sParent.setLeft(successor.getRight()); } } } } public NodePair findNodeAndParent(Node curNode,int data){ if(curNode==null){ return null; } Node parent=null; Node son=null; NodePair pair=null; while(curNode!=null){ int curData=curNode.getData(); if(curData==data){ son=curNode;//when curNode.getData()==data,'parent' is null.Is it OK? break; } if(data<curData){ parent=curNode; curNode=curNode.getLeft(); } if(data>curData){ parent=curNode; curNode=curNode.getRight(); } } pair=new NodePair(son,parent); return pair; } public boolean hasLeftOnly(Node node){ return node!=null&&node.getLeft()!=null&&node.getRight()==null; } public boolean hasRightOnly(Node node){ return node!=null&&node.getRight()!=null&&node.getLeft()==null; } public boolean isLeaf(Node node){ return node!=null&&node.getLeft()==null&&node.getRight()==null; } public NodePair min(Node curNode){ if(curNode==null){ return null; } Node parent=null; while(curNode.getLeft()!=null){//when 'curNode' has no left child,'curNode' is min,and its parent is null(ok?) parent=curNode; curNode=curNode.getLeft(); } return new NodePair(curNode,parent); } //we don't get 'max''s parent node like 'min' public Node max(Node curNode){ if(curNode==null){ return null; } while(curNode.getRight()!=null){ curNode=curNode.getRight(); } return curNode; } public Node find(int target){ if(root==null){//empty tree return null; }else{ return findHelp(root,target); } } public Node findHelp(Node curNode,int target){ Node result=null; int curData=curNode.getData(); if(target==curData){ result=curNode; } if(target<curData){ findHelp(curNode.getLeft(),target); } if(target>curData){ findHelp(curNode.getRight(),target); } return result; } public void insert(int dataInsert){ if(root==null){//the tree is empty root=new Node(dataInsert); }else{ insertHelp(root,dataInsert); } } public void insertHelp(Node curNode,int dataInsert){ Node nodeToInsert=new Node(dataInsert); int curData=curNode.getData(); if(dataInsert<=curData){//insert into left tree Node left=curNode.getLeft(); if(left==null){ curNode.setLeft(nodeToInsert); }else{ insertHelp(left,dataInsert); } } if(dataInsert>curData){//insert into right tree Node right=curNode.getRight(); if(right==null){ curNode.setRight(nodeToInsert); }else{ insertHelp(right,dataInsert); } } } public void levelTraverse(){ if(root==null){ return; } Node node=root; LinkedList<Node> queue=new LinkedList<Node>(); queue.addLast(node); while(!queue.isEmpty()){ node=queue.removeFirst(); System.out.print(node.getData()+" "); if(node.getLeft()!=null){ queue.addLast(node.getLeft()); } if(node.getRight()!=null){ queue.addLast(node.getRight()); } } System.out.println(); } public void inOrder(Node curNode){ if(curNode==null){ return; } inOrder(curNode.getLeft()); System.out.print(curNode.getData()+" "); inOrder(curNode.getRight()); } //when deleting a node,we need the node and its parent. private static class NodePair{ Node son; Node parent; NodePair(Node son,Node parent){ this.son=son; this.parent=parent; } } }
发表评论
-
二维数组(矩阵)对角线输出
2014-04-28 17:55 4677/** 二维数组 对角线输出 两个方向 例如对于数 ... -
线段树-poj1177-N个矩形求边长(离散化+扫描线)
2013-01-05 20:34 2957package com.ljn.base; import ... -
线段树-入门
2013-01-05 20:32 2155/** * 线段树入门 * 问题:已知线段 ... -
bitmap求哈密顿距离-给定N(1<=N<=100000)个五维的点A(x1,x2,x3,x4,x5),求两个点X(x1,x2,x3,x4,x5)和Y(
2012-12-27 21:12 2954import java.util.Random; / ... -
百度笔试题:一个已经排序好的很大的数组,现在给它划分成m段,每段长度不定,段长最长为k,然后段内打乱顺序,请设计一个算法对其进行重新排序
2012-12-21 18:17 4102import java.util.Arrays; ... -
有一个数组,每次从中间随机取一个,然后放回去,当所有的元素都被取过,返回总共的取的次数。写一个函数实现。复杂度是什么。
2012-12-07 14:32 3604import java.util.Random; i ... -
三色旗算法
2012-11-29 12:19 3795import java.util.Arrays; ... -
单调队列-用一个长度为k的窗在整数数列上移动,求窗里面所包含的数的最大值
2012-11-11 22:32 2357import java.util.LinkedList; ... -
据说是2012年10月人人网校招的一道笔试题-给出一个重物重量为X,另外提供的小砝码重量分别为1,3,9。。。3^N。 将重物放到天平左侧,问在两边如何添加砝码
2012-10-28 23:41 1971public class ScalesBalance { ... -
编程之美-分层遍历二叉树
2012-08-12 10:02 5901import java.util.ArrayList; ... -
编程之美-最短摘要的生成
2012-08-10 18:37 2472import java.util.HashMap; ... -
编程之美-计算字符串的相似度
2012-08-09 19:25 2889public class StringDistance ... -
编程之美-电话号码对应英语单词
2012-08-09 19:24 4214import java.util.Arrays; ... -
编程之美-数组中最长递增子序列
2012-08-09 19:22 2005import java.util.Arrays; imp ... -
编程之美-数组中最长递增子序列
2012-08-09 19:22 6import java.util.Arrays; imp ... -
xxx
2012-08-09 00:35 0package beautyOfCoding; public ... -
编程之美-子数组的最大和(二维)
2012-08-05 23:51 2255package beautyOfCoding; impo ... -
编程之美-子数组的最大乘积
2012-08-06 00:00 2272public class MaxProduct { ... -
编程之美-找符合条件的整数 用字符串来表示大整数避免溢出
2012-07-26 19:26 1840import java.util.LinkedList ... -
sudoku
2012-07-25 20:36 0package a; public class Sudoku ...
相关推荐
二叉排序树(Binary Sort Tree...在Java中实现二叉排序树时,我们需要考虑其基本操作的逻辑,并注意处理好边界条件和异常情况,以确保代码的正确性和健壮性。同时,为了优化性能,可以考虑使用自平衡的二叉排序树变体。
在Java中实现二叉排序树通常包括以下几个基本操作: 1. **插入操作 (insert)**: 新插入的节点应满足二叉排序树的性质。如果键已经存在,可以选择更新该节点的值或者不进行操作。插入操作通常通过递归实现,首先比较...
以上就是关于二叉查找树在Java中的基本实现,包括插入、删除、遍历和查询等操作。通过这些操作,我们可以高效地管理一组有序数据,并进行各种数据操作。二叉查找树在实际应用中广泛用于数据库索引、文件系统以及各种...
如果是源代码,它可能用C++、Java或Python等编程语言编写,展示了二叉查找树的插入、删除和查找等基本操作的算法实现。如果是数据文件,它可能存储了预构建的二叉查找树,用户可以直接在程序中查看和操作这个树。 ...
在C、C++和Java这三种编程语言中实现二叉查找树,主要涉及以下几个关键操作: **插入操作:** - 首先,从根节点开始,比较新节点的键值与当前节点的键值。 - 如果新节点的键值小于当前节点,移动到当前节点的左子树...
二叉排序树(Binary Search Tree,BST),也称为二叉查找树或有序二叉树,是一种自平衡的二叉树数据结构。在二叉排序树中,每个节点都包含一个键值,对于任意节点,其左子树中的所有节点的键值小于该节点的键值,而...
二叉排序树(Binary Sort Tree,BST),也称为二叉查找树或有序二叉树,是一种特殊类型的二叉树,其每个节点的左子树只包含比其小的元素,右子树包含比其大的元素,且整个树保持自平衡。在本实验报告中,我们将深入...
二叉排序树(Binary Search Tree,BST),也称为二叉查找树或有序二叉树,是一种自平衡的二叉树数据结构,它在处理搜索、插入和删除操作时具有较高的效率。二叉排序树的主要特点是:对于任意节点,其左子树中的所有...
二叉排序树(Binary Sort Tree,BST),也称为二叉查找树或有序二叉树,是一种自平衡的二叉树数据结构,它在处理搜索、插入和删除操作时具有较高的效率。在Java中,我们可以利用面向对象编程的概念来实现二叉排序树...
在iOS编程中,实现二叉排序树的增删改查操作是数据结构和算法的重要应用。CodeBlocks是一款跨平台的C++集成开发环境,虽然通常用于Windows,但它同样支持创建和调试Objective-C代码,这是iOS开发的主要语言。 ### ...
在计算机科学中,二叉搜索树(Binary Search Tree,BST)是一种特殊的二叉树数据结构,它具有以下特性:每个节点包含一个键、一个关联的值、一个指向左子节点的引用以及一个指向右子节点的引用。在二叉搜索树中,...
- **红黑树**:一种自平衡二叉查找树,由Rudolf Bayer于1972年提出。每个节点都有颜色属性,可以是红色或黑色,通过一定的规则保证了任何路径到叶子节点的长度最多为两倍的黑色节点。 - **Splay树**:自适应的平衡...
二叉排序树(Binary Sort Tree,BST),也称为二叉查找树或有序二叉树,是一种自平衡的二叉树数据结构。它在处理搜索、插入和删除操作时具有较高的效率,尤其对于有序数据。在二叉排序树中,每个节点的左子树只包含...
部分内容中提供了java二叉查找树的实现代码,包括Node类、BST类、get方法、put方法、min方法和max方法等。下面是对这些方法的详细解释: * Node类:Node类是一个私有类,用于存储树中的节点。每个节点都有一个键、...
8. **TreeViewer.java**:可能是用来显示和操作树的视图组件,可能包含了树的渲染和交互逻辑。 9. **console**:可能包含控制台交互的代码,用于通过命令行输入进行树的插入、查找和删除操作。 10. **algorithm**...
二叉查找树(Binary Search Tree,BST)是一种特殊的数据结构,它在计算机科学中用于高效地存储和检索数据。在二叉查找树中,每个节点包含一个键(key)、一个关联值、一个指向左子节点的引用以及一个指向右子节点的...
二叉搜索树(Binary Search Tree,BST)是一种特殊的二叉树数据结构,它具有以下特性:每个节点的左子树只包含比当前节点小的元素,而右子树则只包含比当前节点大的元素。这种特性使得二叉搜索树在进行查找、插入和...
二叉排序树(Binary Sort Tree,BST),也称为二叉查找树或二叉搜索树,是一种特殊的二叉树数据结构,它的每个节点都满足以下两个性质: 1. 左子树上的所有节点的值均小于该节点的值。 2. 右子树上的所有节点的值均...
这段代码展示了构建一个基本的二叉搜索树(Binary Search Tree, BST)的实现。二叉搜索树是一种特殊的二叉树,其中每个节点的值大于其左子树中所有节点的值,并且小于其右子树中所有节点的值。这种数据结构在查找、...
二叉搜索树(Binary Search Tree,BST)是一种特殊的二叉树结构,它的每个节点都包含一个键(key)、一个关联的值、一个指向左子树的引用和一个指向右子树的引用。在二叉搜索树中,对于任意节点,其左子树中的所有...