
数据结构和算法
babylove_BaLe
不负勇往。
展开
-
二叉树的构建(Java)
二叉树的建立思路:先对二叉树进行扩展,将每个节点的空指针设置为“#”,这样就可以按前序遍历的方式创建一个二叉树。 创建一个上图所示的二叉树。 输入的值为:A B D # # E # # C # # 实现://创建二叉树 public class Bshu { static int i=0; public static void main(String[] args) {原创 2017-11-14 19:02:10 · 1054 阅读 · 0 评论 -
二叉树的遍历
一、遍历方式前面文章记录了二叉树的创建,那么二叉树该如何遍历呢? 二叉树的遍历方式有四种,分别是前序、中序、后序遍历和层序遍历。前、中、后分别表示根节点在前遍历或在中间遍历或在最后遍历,层序遍历就是按每一层的节点遍历。上图中简易二叉树的遍历结果如下:前序:ABC 中序:BAC 后序:BCA 层序:ABC二、遍历实现以 二叉树的创建 中的二叉树为例进行遍历。前序、中序、后序二叉树的前序、中序、原创 2017-11-14 19:08:45 · 533 阅读 · 0 评论 -
二叉树的深度和宽度
一、二叉树的深度思路:递归实现。 每个节点都可以看作根节点 根节点(任意一个节点)的深度等于它的左子树或右子树深度最大值+1 从根结点开始遍历,若遍历到叶子节点,深度为0 //二叉树的深度 public static int Depth(node root){ if(root == null){ return 0; }原创 2017-11-14 20:53:55 · 685 阅读 · 0 评论 -
中缀表达式转后缀表达式(逆波兰)
一、中缀表达式转后缀表达式中缀表达式就是普通的表达式。如:9+(3-1)*3+10/2 后缀表达式是一种不需要括号的表示法,又叫逆波兰表达式。上面的式子用后缀法表示:9 3 1 - 3 * + 10 2 / +那么如何转化成后缀表达式?思路:从左往右遍历: 1. 如果是数字则直接输出 2. 如果是符号则入栈,但要通过以下判断 若该符号c是右括号或者c的优先级≤栈顶符号,则栈中元素依次出栈输出,原创 2017-11-30 19:47:18 · 964 阅读 · 0 评论 -
求一个单链表的中间节点
求一个单链表的中点思路:用两个指针,慢指针每次走一步,快指针每次走两步,当快指针结束时,慢指针所在的位置就是中点。代码实现主要方法:public static node lookMid(node head){ //求中间节点,快慢指针 node low = head; node fast = head; while(fast != nul原创 2017-12-05 21:48:20 · 1013 阅读 · 0 评论 -
单链表的反转
链表的反转例如链表: 1->2->3->4->5 反转之后: 5->4->3->2->1思路:从头到尾遍历原链表,每遍历一个节点,将其摘下放在新链表的最前端,作为头节点。 代码实现:public static void ReverseNode(node head){ node p = head; node pre = null; node原创 2017-12-06 11:33:24 · 298 阅读 · 0 评论 -
排序算法之基数排序(Java)
基数排序 基数排序是一种基于分配的排序(空间换时间),不同于常见的基于比较的排序(冒泡、快排、归并…等)。 基于比较的排序时间复杂度通常是O(n^2)或者O(nlogn),下限是O(nlogn); 基于分配的排序算法的时间复杂度可以达到O(n),但需要消耗额外空间; 在某些时候,基数排序的效率高于其它基于比较的排序算法(快排、归并等)。 原理 原理是将整数按位数切割成不同的...原创 2018-06-24 13:43:32 · 777 阅读 · 0 评论