数据结构&算法
文章平均质量分 70
快阁东西倚晚晴
stay hungry, stay foolish
展开
-
栈的数据结构和基本操作2022-7-15
栈(stack)是限定仅在表尾进行插入和删除操作的线性表。我们把允许插入和删除的一端称为栈顶(top),另一端称为栈底(bottom),不含任何数据元素的栈称为空栈。栈又称为后进先出(LastInFirstOut)的线性表,简称LIFO结构。理解栈的定义需要注意首先它是一个线性表,也就是说,栈元素具有线性关系,即前驱后继关系。只不过它是一种特殊的线性表而已。定义中说是在线性表的表尾进行插入和删除操作,这里表尾是指栈顶,而不是栈底。它们在时间复杂度上是一样的,均为O(1)。...原创 2022-07-15 11:39:59 · 374 阅读 · 1 评论 -
线索二叉树
问题由来:1.观察下面的二叉树结构,可以发现其叶子节点有许多的空指针域:2.当遍历一个二叉树的时候,比如中序遍历,得到HDIBEJAFCG这样的字符序列,遍历过后,我们可以知道,结点I的前驱是D,后继是B,结点F的前驱是A,后继是C。但是对这个序列,我们在遍历之前是不知道的,要知道某个节点的前驱和后继只有在遍历时才会发现。所以,由上面的两点发现,可以借助这些空指针域来存放一些节点的前驱和后继。还是以中序遍历为例,我们把节点的空左孩子指向该节点的前驱,而把节点的空右孩...原创 2022-05-31 15:01:50 · 269 阅读 · 0 评论 -
二叉树前、中、后序遍历的递归和非递归算法
采用递归式的方法代码就很简洁,不多说明,如下。重点是非递归方法,非递归要借助栈来实现。以先序为例,遍历顺序为根-左-右。根节点先进栈,然后判断栈是否为空,不为空则进行出栈并打印出出栈的节点的值,接着判断该出栈节点有无左右孩子节点,若有,则按照右孩子先,左孩子后的顺序进栈。接着继续判断栈是否为空,不为空则进行出栈和打印值得操作,并判断出栈的节点有无左右孩子......按照这种方式一直进行,容易看出,这个循环的条件是栈中还有元素,即栈非空。package bitree;import ja..原创 2022-05-24 20:12:45 · 124 阅读 · 0 评论 -
表达式树&前缀&中缀&后缀表达式
表达式树( expression tree ),表达式树的树叶是操作数( operand ),比如常数或变量,而其他的节点为操作符( operator )如:由于这里所有的操作都是二元的,因此这棵特定的树正好是二叉树,虽然这是最简单的情况,但是节点还是有可能含有多于两个的儿子的。一个节点也有可能只有一个儿子,如具有一目减算符( unary minus operator )的情形。我们可以将通过递归计算左子树和右子树所得到的值应用在根处的算符操作中而算出表达式树 T 的值。在我们的例中,左子树原创 2022-05-18 21:58:10 · 1403 阅读 · 0 评论