04 2022 档案
摘要:假如有个数列{1,2,3,4,5,6} 创建一个二叉排序树 1)左子树全部为空,更像一个单链表 2)插入速度没有影响 3)查询速度明显降低(因为需要依次比较),不能发挥BST的优势,因为每次还需要比较左子树,其查询速度比单链表还慢 4)解决方案—平衡二叉树(AVL) 平衡二叉树: 1)平衡二叉树又叫
阅读全文
摘要:二叉(查找)排序树(BST):对于二叉排序树的任何一个非叶子节点要求左子节点的值比当前节点的值小,右子节点的值比当前节点的值大 特别说明:若有相同的值,可将该节点放在左子节点或右子节点,尽量避免相同值出现 1 public class BinarySortTreeDemo { 2 public st
阅读全文
摘要:二叉树—删除节点 1)删除节点是叶子节点,删除该节点 2)删除节点是非叶子节点,则删除该子树 思路: 1、考虑若树是空树root,如果只有一个root节点,则等价将二叉树置空 2、因二叉树是单向的,所以判断当前节点的子节点是否需要删除,而不能判断当前这个节点是不是需要删除节点 3、如果当前节点的左子
阅读全文
摘要:前序查找: 1.先判断当前节点的no是否等于要查找的 2.若相等,则返回当前节点 3.若不等,则判断当前节点的左子节点是否为空,若不为空,则递归前序查找 4.若左递归前序查找,找到节点,则返回,否继续判断。当前节点的右子节点是否为空,若不为空,则继续向右递归前序查找 中序查找: 1.判断当前节点的左
阅读全文
摘要:二叉树 前序遍历:先输出父节点,再遍历左子树和右子树 中序遍历:先输出左子树,再遍历父节点,最后为右子树 后序遍历:先输出左子树,再遍历右子树,最后为父节点 小结:看输出父节点的顺序,就确定是前序还是中序后序 遍历步骤: 1、创建一个二叉树 2、前序遍历: 2.1 先输出当前节点(根节点) 2.2
阅读全文
摘要:二叉树 1)数组存储方式分析: 优点:通过下标访问元素,速度快。对于有序数组还可以使用二分查找提高检索速度 缺点:检索具体某个值,或插入值会整体移动,效率较低 2)链表存储方式分析: 优点:一定程度上对数组存储方式有优化,插入结点和删除结点效率好 缺点,进行检索时,效率低,需要从头结点开始遍历 3)
阅读全文
摘要:哈希表是一种数据结构,不是算法 一个需求:新员工报道,将该员工的信息加入(id,性别,年龄,。。。)输入该员工的id时,要求找到该员工的所有信息 要求:不使用数据库,尽量节省内存,速度越快越好 ————哈希表(散列) 一级缓存,或者还有有二级缓存 1 import java.util.Hashtab
阅读全文
摘要:递归能够解决的问题: 1)数学问题:8皇后,汉诺塔,阶乘问题,迷宫问题,球和篮子的问题 2)算法也会用到:快排,归并排序,二分查找,分治算法 3)将用栈解决的问题换成递归比较简洁 递归需要遵守的规则: 1)执行一个方法,就创建一个新的受保护的独立空间(栈空间) 2)方法的局部变量是独立的,不会相互影
阅读全文
摘要:数栈numStack:存放数 符号栈operStack:存放运算符 思路: 1、通过一个index值 (相当于索引),遍历表达式 2、如果发现index扫描到是一个数字,直接入数栈 3、如果扫描到时一个符号,分如下情况: 1)如果当前符号栈为空,就直接入栈 2)如果符号栈有操作符,就进行比较, 如果
阅读全文
摘要:stack栈 栈是一个先入后出有序列表 栈是限制线性表中元素的插入和删除只能在线性表的同一端进行的一个特殊线性表。 允许插入和删除的一端,为变化的一端,为栈顶,另一端为固定的一端,为栈底 根据栈定义:最先放入栈中元素在栈底,最后放入的元素在栈顶,而删除元素,最后放入的元素最先删除,最先放入的元素最后
阅读全文