数据结构
文章平均质量分 59
兰因絮果.
持之以恒
展开
-
二叉树的遍历
要想遍历一个二叉树首先得有一个二叉树,我在实现的时候,一开始想着一个结点一个结点的添加,但是那样很麻烦,所以就提供了一个运用数组创建二叉树的方法。代码如下: public class BinaryTree<T> { //利用数组创建二叉树 private T[] nums ; private BinaryTreeNode root; //初始化二叉树...原创 2019-08-23 16:39:22 · 142 阅读 · 0 评论 -
堆排序
(二叉)堆实质是一个数组,可以被近似的看做一个完全二叉树。以下代码是基本的二叉树代码框架: public class BinaryHeap<T extends Comparable<T>> { //规定其实现了Comparable接口,一是为了能对泛型进行实例化,二是保证了该类是可排序的 private int currentSize; // 堆中元...原创 2019-08-25 17:06:54 · 97 阅读 · 0 评论 -
二叉搜索树
二叉搜索树要么是一颗空树,要么是满足以下条件的二叉树:对于二叉搜索树上每个节点X,左子树所有项的值小于X的值,右子树所有项的值大于X的值。 中序遍历二叉搜索树可以得到其升序排序结果。 以下代码提供了二叉搜索树创建、插入以及中序遍历的功能: public class BinarySearchTree<T extends Comparable> { private Node ...原创 2019-08-26 21:43:15 · 103 阅读 · 0 评论 -
归并排序
归并排序的思想是分而治之、归并的思想。 假设middle左边和右边的数组已经排好序了,那我们要做的事就是合并这两个子数组,合并的过程就称为“并”。那怎么才能做到使左边和右边的数组已经排好序呢?这就是“归”的步骤要做的事,不断拆分数组,直到子数组大小为1,直接调用“并”的过程就好了。 实现代码如下: //left~middle有序,middle+1~right有序,该函数实现了“并”的部...原创 2019-08-27 21:39:00 · 70 阅读 · 0 评论 -
快速排序
快排也是采用的分治的思想。 首先从数组中挑选一个基准,比基准大的放在基准右边,否则放在基准左边。这样一轮下来,基准的位置就确定了。 递归调用,以相同的方法对待得到的两个子数组,直到子数组大小为2。因为数组大小为2时,确定了基准的位置,该数组就是有序的了。 我每次以array[low]即数组的首元素作为基准来进行快速排序的。实现代码如下: //每次都以array[low]为基准,找到该数所在的位...原创 2019-08-28 10:48:15 · 71 阅读 · 0 评论 -
红黑树
红黑树是二叉搜索树的一种 红黑树的性质: 每个节点的颜色要么为红色,要么为黑色; 根节点是黑色的; 叶子节点是黑色的(根据《算法导论》一书,我们把最底层的结点下面两个空节点视为叶子节点,成为Nil); 任意两个红色节点不能为父子关系; 每个节点到其后代叶子节点的黑高相同。(由于该特性导致红黑树是一种近似平衡的二叉树) 黑高(hb):从某个节点x出发(不含该节点)到达一个叶子节点的任意一条...原创 2019-08-31 14:45:42 · 79 阅读 · 0 评论