查找二叉树

来源:互联网 发布:java 自定义构造函数 编辑:程序博客网 时间:2024/05/23 22:05
什么是二叉树?

二叉树是一个每个结点至多只有两个子结点的树


二叉树的实现
二叉树的每个结点必须包含三个信息: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
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 奔驰glc发动机声音大怎么办 淋膜机模具螺丝拧不动怎么办 一字螺丝滑丝了怎么办 螺丝拧歪卡住了怎么办 车牌螺丝拧歪了怎么办 空心墙打膨胀螺丝打不上怎么办 沉孔内六角螺丝滑丝怎么办 内六角螺丝滑了怎么办? 三色灯不变光了怎么办 卧室灯不变色了怎么办 圆柱齿轮减速机噪音大怎么办 轴与套间隙生锈怎么办 汽车停小区被刮怎么办 下楼梯摔跤了 屁股疼 怎么办 剧烈咳嗽震的肚子疼怎么办 饺子粘在盘子上怎么办 生饺子粘在盘子怎么办 饺子粘在案板上怎么办 饺子冷冻粘起了怎么办 冰箱饺子冻住了怎么办 水饺都冻一块了怎么办 wps卸载了后文件打不开怎么办 六角螺母拧滑了怎么办 梅花内六角螺丝扭滑丝了怎么办 眼镜螺丝滑丝了怎么办 大螺丝拆不下来怎么办 一字螺丝扭不动怎么办 带帽的螺丝拧花怎么办 螺丝拧不出来了怎么办 小六角螺丝滑丝怎么办 螺丝拧不下来了怎么办 固定水龙头的螺母扭不动怎么办 小螺丝帽拧花了怎么办 6角螺丝帽拧圆了怎么办 眼镜螺丝滑扣了怎么办 眼镜的螺丝掉了怎么办 螺丝松了怎么办小窍门 螺丝松了怎么办 小窍门 小螺丝完全滑牙怎么办 车座椅螺丝滑丝怎么办 塑料柱突然滑牙怎么办