二叉树的中序遍历

一、中序遍历 中序遍历过程:先访问左子节点,然后访问当前节点,最后访问右子节点。 以下试一次中序遍历过程: 二、非递归实现 非递归方式遍历依赖栈来实现,因为要先访问子节点,然后访问父节点,因此必须要有一个数据结构来保存已经父节点。 实现原理: 每次遍历到一个节点,不访问它,先压栈,然后对左子树循环做 ... 阅读更多

二叉树的先序遍历

一、先序遍历 先序遍历的意思是:先遍历当前节点,再分别遍历左、右子节点。 例如一棵二叉树为: 它的先序遍历序列 (红色虚线标出来的) 为:[1, 2, 4, 3, 5 6] 。 二、递归实现 递归的实现很简单,先访问当前节点,然后分别递归访问左右子节点。 [crayon-69469be4960bc3114 ... 阅读更多

《剑指 offer 》面试题 8:二叉树的下一个节点

一、题目 给定一颗二叉树和其中的一个节点,如何找出中序遍历序列的下一个节点?树中的节点除了有两个分别指向左右子节点的指针,还有一个指向父节点的指针。 以下面的二叉树为例,它的中序遍历序列是:[2, 4, 1, 5, 3, 6],节点 4 的下一个节点是 1,节点 3 的下一个节点是 5 。 二、分析 画出上面这棵 ... 阅读更多

graphviz 画二叉树对齐的小技巧

一、问题描述 画二叉树的时候,总是无法对齐圆点得到对称的节点。例如:

画出来的效果: 红色标出来的 4 个线条,长度不一样,子节点看起来不对称,就导致整个二叉树看起来也不够美观。 二、解决方案 可以在子节点中加一个中间节点,把线条的 wei ... 阅读更多

《剑指 offer 》面试题 7:重建二叉树

一、题目 输入某二叉树的前序遍历和中序遍历的结果,请重建该二叉树。假设输入的前序遍历和中序遍历的结果中都不包含重复的数字。 例如,输入前序遍历序列 [1, 2, 4, 7, 3, 5, 6, 8] 和中序遍历序列 [4, 7, 2, 1, 5, 3, 8, 6],则重建如下图所示的二叉树并输出它的头结点: ... 阅读更多

排序算法四:梳排序

一、梳排序简介 梳排序是冒泡排序的一种优化方案,主要是为了解决冒泡排序中的尾部小数值问题。它主要的思想是通过比较元素和固定步长位置上的数据,先进行部分优化,然后逐步减少步长,以此来对数据进行预处理。 以数组 [3,1 5, 2, 4] 为例,假设步长是 2,那么就分别处理 [3, 5, 4] 和 [1, 2], ... 阅读更多

数据结构之 B 树

一、 B 树的基本概念 B 树是一种多叉树,被广泛应用于数据库索引中。它也是一种特殊的搜索树,和搜索树最大的不同在于它的每个节点都包含了 n 个关键字和 n+1 个指向子节点的指针。它的表现形式为: B 树的特点: 假设 x.key 为当前节点中的关键字,x.child.key 是子节点中的关键字,那么它们之间存在以下关 ... 阅读更多