查找二叉树
来源:互联网 发布:java 自定义构造函数 编辑:程序博客网 时间:2024/05/23 22:05
什么是二叉树?
二叉树的每个结点必须包含三个信息:1、结点所代表的元素 2、左边的子节点(若没有左子节点则为null) 3、右边的子节点(若没有右子节点则为null)。每个结点的结构如下所示:
什么是查找二叉树?
查找二叉树是一种特殊的二叉树它满足:对于树中的每个结点X,它的左子树中所有项的值小于X的值,而他右子树中所有项的值大于X的值
二叉树是一个每个结点至多只有两个子结点的树
二叉树的每个结点必须包含三个信息:1、结点所代表的元素 2、左边的子节点(若没有左子节点则为null) 3、右边的子节点(若没有右子节点则为null)。每个结点的结构如下所示:
什么是查找二叉树?
查找二叉树是一种特殊的二叉树它满足:对于树中的每个结点X,它的左子树中所有项的值小于X的值,而他右子树中所有项的值大于X的值
查找二叉树的实现代码
包含了插入、删除操作
class BinarySearchTree<T>{private Comparator<? super T> cmp;private BinaryNode<T> root;private static class BinaryNode<T>{BinaryNode<T> left;BinaryNode<T> right;T data;public BinaryNode(BinaryNode<T> left,BinaryNode<T> right,T data){this.left=left;this.right=right;this.data=data;}}public BinarySearchTree(){this(null);}public BinarySearchTree(Comparator<T> cmp){root=null;this.cmp=cmp;}public void makeEmpty(){root=null;}public boolean isEmpty(){return root==null;}public T findMin(){if(findMin(root)==null){return null;}return findMin(root).data;}public T findMax(){if(findMax(root)==null){return null;}return findMax(root).data;}public void insert(T x){insert(x, root);}public void remove(T x){remove(x, root);}private void insert(T x,BinaryNode<T> t){if (t==null){root=new BinaryNode<T>(null, null, x);return;}int comResult=compare(x, t.data);if(comResult>0){if (t.right==null){t.right=new BinaryNode<T>(null, null, x);return;}else{insert(x,t.right);}}else if (comResult<0){if (t.left==null){t.left=new BinaryNode<T>(null, null, x);return;}else {insert(x,t.left);}}}private BinaryNode<T> remove(T x,BinaryNode<T> t){if(t==null){return null;}int comResult=compare(x, t.data);if(comResult>0){ t.right=remove(x, t.right);}else if (comResult<0){t.left=remove(x,t.left);}else if(t.left!=null && t.right!=null){t.data=findMin(t.right).data;t.right=remove(t.data,t.right);/** * 上面的语句可用下面两句替代 * t.data=findMax(t.left).data; * t.left=remove(t.data,t.left); */}else{t=(t.left!=null) ? t.left : t.right;//}return t;}private BinaryNode<T> findMin(BinaryNode<T> b){if(b==null){return null;}else if(b.left==null){return b;}return findMin(b.left);}private BinaryNode<T> findMax(BinaryNode<T> b){if(b==null){return null;}else if (b.right==null){return b;}return findMax(b.right);}private int compare(T a,T b){if (cmp!=null){return cmp.compare(a, b);}else {return ((Comparable)a).compareTo(b);}}/****************************下面的代码是为了打印出二叉树,不属于二叉树的具体实现********************///层序遍历public void printTree(){Queue<BinaryNode<T>> queue=new LinkedList<BinaryNode<T>>();queue.offer(root);BinaryNode<T> node;int current=0;int last=0;while (!queue.isEmpty()){last=queue.size();current=0;while (current<last){node=queue.poll();System.out.print(node.data+" ");if(node.left!=null){queue.offer(node.left);}if (node.right!=null){queue.offer(node.right);}current++;}System.out.println();}}}
0 0
- 查找--二叉查找树
- 二叉树、二叉查找树
- 二叉树 & 二叉查找树
- 【查找结构】二叉查找树
- 查找之二叉树查找
- 查找之二叉树查找
- 查找:二叉查找树总结
- 二叉树查找树...
- 二叉树查找树
- 查找--遍历二叉树
- 二叉查找树
- 二叉查找树实现
- 二叉查找树
- 动态二叉查找树
- 最优二叉查找树
- 二叉查找树
- 二叉查找树
- 平衡二叉查找树
- 数据库的优化
- Mysql数据库备份数据库与还原数据库
- HDU - 1200 To and Fro(水)
- Android Design: 九种常见Activity及代码解析之"Navigation Drawer Activity"
- SQL常用命令
- 查找二叉树
- EIP和目标地址的关系
- DirectX11 骷髅头示例Demo
- UVA 11177 凸多边形和圆交
- POJ - 2029 Get Many Persimmon Trees(暴力水题)
- Android控件布局属性全解
- swift语法讲解及简单入门教程
- 对象创建型之AbstractFactory(抽象工厂模式)
- 蛇形填数