数据结构--二叉排序树
来源:互联网 发布:新纳粹知乎 编辑:程序博客网 时间:2024/06/05 19:03
1、基本概念
二叉排序树又称二叉查找树,它是一颗空树或者具有以下特征的二叉树:
若左子树不为空,则左子树上所有节点的值都小于根结构的值
若右子树不为空,则右子树上所有节点的值都大于根结构的值
它的左右子树也分别是二叉排序树
2、具体操作
static class Node{ int data; Node left, right; public Node(int data){ this.data = data; left = null; right = null; }}public static void main(String[] args) { int[] src = { 5,7,3,1,9,6,4 }; Node root = null; for (int i = 0; i <src.length; i++) { root = insert(src[i], root); } remove(3,root); print(root);}//中序遍历public static void print(Node node){ if(node != null) { print(node.left); System.out.println(node.data + " "); print(node.right); }}//判断是否存在值public static boolean contain(Node node, int data){ if (node == null) return false; if(data > node.data) contain(node.right, data); else if (data < node.data) contain(node.left, data); else return true; return false;}//插入操作public static Node insert(int data, Node node){ if(node == null) return new Node(data); if(data < node.data) node.left = insert(data, node.left); else if(data > node.data) node.right = insert(data, node.right); else return node; return node;}//查找树中的最小值public static Node findMin(Node node){ if(node == null) return null; else if(node.left == null) return node; else return findMin(node.left);//最左边的是最小的}//查找树中的最大值public static Node findMax(Node node){ if(node == null) return null; else if(node.right == null) return node; else return findMax(node.right);//最右边的是最大的}//删除操作//1 删除没有左子树或者右子树的节点,直接删除当前节点//2 如果待删除的节点有左右子树,则查找当前节点的右子树中最小值节点并将值赋给当前节点,再删除右子树的最小值的节点private static Node remove(int data,Node node) { if(node == null) return null; if(data < node.data) node.left = remove(data, node.left); else if(data > node.data) node.right = remove(data, node.right); else if(node.left!=null && node.right!=null) {//找到需要删除的节点且节点下有两个子节点 //先找到需要删除的节点下,右子树中最小的节点 //并将它的值赋给需要删除的节点。 node.data = findMin(node.right).data; //删除前面找到的最小的节点。将从当前节点再次递归查找并删除 node.right = remove(node.data, node.right); } else node = (node.left != null) ? node.left : node.right; return node;}
参考:
大话数据结构
数据结构与算法分析-java版
http://blog.csdn.net/sb1ue/article/details/8922326
阅读全文
0 0
- [数据结构]二叉排序树
- 数据结构 - 二叉排序树
- 数据结构 - 二叉排序树
- 数据结构-二叉排序树
- 数据结构-二叉排序树
- 数据结构 二叉排序树
- 数据结构:二叉排序树
- 数据结构 二叉排序树
- 数据结构-二叉排序树
- 数据结构---二叉排序树
- 数据结构--二叉排序树
- 数据结构---二叉排序树
- 数据结构--二叉排序树
- 数据结构-二叉排序树
- 二叉排序树数据结构和搜索
- 数据结构 平衡二叉排序树
- 数据结构试验:二叉排序树
- 数据结构之二叉排序树
- 爬取新浪新闻网
- [bzoj1441]Min 贝祖定理
- linux中断与系统调用
- Java中的24种设计模式与7大原则
- Java的基础语法(1)
- 数据结构--二叉排序树
- C++中的istringstream 的用法
- socket()
- java常量池和运行时常量池
- JS学习之数组;
- 9.8.3 消除消失的编号
- 中国性别平等,要等到卫生棉条普及的那一天
- python批量获取html内body内容
- 获取安卓设备UUID