随笔分类 - 数据结构与算法 / 树
摘要:在前面的文章中总结了二叉树的一些操作,提供了二叉树前中后的递归和非递归的实现。在非递归的实现中,基本思想是利用栈来模拟递归调用遍历的过程,本质上和递归实现没有区别,空间复杂度为 。是否存在一种算法,它不使用栈也不破坏二叉树结构,但是可以完成对二叉树的遍历?即: 空间复杂度为\(O(1)
阅读全文
摘要:LeetCode有两道合并数据相关的题,分别是: 21.合并两个有序链表 88.合并两个有序数组 617.合并二叉树 这些题数据结构不同,但是算法的目标大致一致,即将给定的两个相同的数据结构,合并为一个数据结构。其中会用到递归等思想,下面先从最简单的合并两个有序数组开始分析吧。 88.合并两个有序数
阅读全文
摘要:二叉树定义 二叉树(Binary Tree)是n(n >= 0)个结点所构成的集合,它或为空树(n=0);或为非空树,对于非空树 : 有且仅有一个称之为根的结点 除根节点以外的其余结点分为两个互不相交的子集 和 ,分别称为 的左子树和右子树,且 和 本身又是二
阅读全文
摘要:二叉查找树(Binary Search Tree),(又:二叉搜索树,二叉排序树),它具有以下特点: 若任一节点的左子树不空,则左子树上所有结点的值均小于它的根结点的值; 若任一节点的右子树不空,则右子树上所有结点的值均大于它的根结点的值; 任意节点的左、右子树也分别为二叉查找树; 没有键值相等的节
阅读全文
摘要:第一个看到树状数组(Binary Indexed Tree)这个数据结构时,真的被吸引了,设计真是简洁,属于理论很复杂,但实现不复杂的那种算法。该算法多用于高效计算数列的前缀和, 区间和动态单点值的修改。要理解树状数组的工作原理,必须要知道二进制的运算法则,比如 &、 -、补码和反码等。下面先介绍下
阅读全文
摘要:在计算机科学中,AVL树是最早被发明的自平衡二叉查找树。在AVL树中,任一节点对应的两棵子树的最大高度差为1,因此它也被称为高度平衡树。查找、插入和删除在平均和最坏情况下的时间复杂度都是 。所以我们可知,AVL树首先是二叉查找树(BST),不了解BST的同学可以了解一下,因为AVL
阅读全文