二叉搜索树
来源:互联网 发布:通达信解禁日期提前知 编辑:程序博客网 时间:2024/06/03 17:50
public class BinarySearchTree { //内部类,代表二叉搜索树的一个节点 private class TreeNode{ int element; TreeNode left; TreeNode right; }// //递归搜索查找// public TreeNode Find(int x,TreeNode T){// if(T==null){// return null;// }// if(x<T.element){// return Find(x,T.left);// }else if(x>T.element){// return Find(x,T.right);// }else{// return T;// }// } //非递归搜索查找 public TreeNode Find(int x,TreeNode T){ if(T!=null){ if(x<T.element){ while(T.left!=null){ T=T.left; } }else{ while(T.right!=null){ T=T.right; } } } return T; }// //递归的方式查找最小值// public TreeNode FindMin(TreeNode T){// if(T==null){// return null;// }else if(T.left==null){// return T;// }else{// return FindMin(T.left);// }// } //非递归的方式查找最小值 public TreeNode FindMin(TreeNode T){ if(T!=null){ while(T.left!=null){ T=T.left; } } return T; }// //递归的方式查找最大值// public TreeNode FindMax(TreeNode T){// if(T==null){// return null;// }else if(T.right==null){// return T;// }else{// return FindMin(T.right);// }// } //非递归的方式查找最大值 public TreeNode FindMax(TreeNode T){ if(T!=null){ while(T.right!=null){ T=T.right; } } return T; } /* * 二叉搜索树的插入规则: * 1. 如果插入前该树无任何节点,则将该节点插到根节点 * 2. 如果该树小于要插入位置的父节点,则递归插入到该父节点的左子节点 * 3. 如果该树大于要插入位置的父节点,则递归插入到该父节点的右子节点 * 4. 最后将插入后的树节点返回 */ public TreeNode Insert(int x,TreeNode T){ if(T==null){ T.element=x; T.left=T.right=null; }else if(x<T.element){ T.left=Insert(x,T.left); }else if(x>T.element){ T.right=Insert(x,T.right); } return T; } /* * 二叉搜索树的删除规则: * 1. 如果节点是叶节点,则立即删除 * 2. 如果节点有一个子节点,则删除该节点后,其子节点代替父节点(被删除的节点)的位置 * 3. 如果节点有两个子节点,则用其右子树的最小数据代替该节点的数据并递归地删除那个节点 */ public TreeNode Delete(int x,TreeNode T){ TreeNode TmpCell; if(T==null){ return null; }else if(x<T.element){ //如果小于该节点值,则递归删除其左子节点 T.left=Delete(x,T.left); }else if(x>T.element){ //如果大于该节点值,则递归删除其右子节点 T.right=Delete(x,T.right); }else if(T.left!=null&&T.right!=null){ //若被删除的节点有左右子节点,则将其右子树的最小数据代替该节点的数据,并递归删除该节点 TmpCell=FindMin(T.right); T.element=TmpCell.element; T.right=Delete(T.element,T.right); }else{ //若被删除的节点只有一个子节点或者为叶节点 TmpCell=T; if(T.left==null){ T=T.right; }else if(T.right==null){ T=T.left; } TmpCell=null; } return T; }}
阅读全文
0 0
- 【二叉搜索数】HDU3791二叉搜索树
- 二叉树--二叉搜索树
- 【二叉树】二叉搜索树
- 二叉树- 二叉搜索树
- 【搜索树】二叉搜索树
- 二叉搜索树BSTree
- 二叉搜索树
- 二叉搜索树
- 二叉搜索树
- 最优二叉搜索树
- 二叉搜索树
- 二叉搜索树
- HDOJ3791 二叉搜索树
- 二叉查找树搜索
- 二叉搜索树
- 二叉搜索树
- BST 二叉搜索树
- 二叉搜索树
- 【贪心+二分查找】Office Keys CodeForces
- CRON表达式基础
- python及常用库numpy、scipy、matplotlib安装与卸载-Windows环境
- tomcat集群实现源码级别剖析
- 修改之前的多条commit提交记录
- 二叉搜索树
- Spring事务管理中@Transactional的propagation参数(转)
- 35 个 Java 代码性能优化总结
- laravel 异步消息队列
- Shell学习总结之逻辑运算符及表达式
- 线程可警告状态以及APC队列
- Java中-classpath和路径的使用
- HDU
- 前端中用手机拍照压缩,上传图片压缩