概要
链式二叉树的实现难度与堆的实现差别不大,主要是要考虑到递归完整的过程,当我们实现链式二叉树的时候,我们需要清晰地认识到递归的运行轨迹,刚开始的时候可以先了解前序,中序,后续,完整的画出递归展开图来更加清晰的认识。
结构上的特点
链式二叉树的结构和堆是不同的,所以我们没有办法通过对指针++的方法访问下一个数据,这是独属于堆的数据访问方法,对于堆来说我们可以通过这种方法快速实现层序遍历,但是在链式二叉树上,我们并不能使用这种方式。逻辑结构上链式二叉树的创建是由一生二,二生四的几何速度创建的,当我们进行数据的插入时,可以通过向上调整的方式使其有序,这也是建堆的过程。
在链式二叉树的实现中,最容易出现的错误也就只有对空的检测,除此之外,个人感觉没有什么难度
根据已有遍历结果还原二叉树
个人感觉二叉树的有趣点,有些题目会要求我们根据已有的遍历结果来还原二叉树的结构,这种题目属于了解二叉树的各种遍历方式的基础上深入一点应用,不仅要求我们会遍历,而且要学会反推。
有的时候,你觉得自己写二叉树的各种遍历方式非常快,思路也很顺畅,但是反过来就不一定了,不管正反,其思路都是换汤不换药,根本上还是考察你对递归的理解程度,如果你能完整的理解递归的展开,那么这种类型的题对你是没有难度的。
当然在这类题上,我还发现了一些有趣的地方,这类题中,我们其实可以将除根的左右子树拆下来,对的,就是拆下来,这也是我无意间发现的,当我们将遍历结果中的一个节点作为根时,我们再着手还原,我们得到的就是这个节点的所有孩子。
技术细节
对于链式二叉树的实现上,我推荐将构造的数打印到控制台上,或者也可以直接调试查看,对于链式二叉树的函数实现上,我们调试的时候是不易查看的(初学者),所以我们可以将每个函数进行单独调试,逐一排查,虽然慢,但是也有效。多数的错误都是对于空节点的访问,小心空节点访问是链式二叉树的重点。
小结
递归是一个复杂的过程,我们需要知道其每一步所出现的可能,这样才能完成递归过程,而二叉树的学习可以使我们更进一步理解递归的魅力。