优雅的二叉树

二叉树(Tree)

(⊙﹏⊙)

这是一个满二叉树,瞧瞧它,枝繁叶茂,长得可带劲啦,hah。

深度是指所有结点中最深的结点所在的层数。




完全二叉树

从上往下看,就是深度(deepth)4嘛,emmm,高度(height)那肯定得仰视的角度嘛。自上而下的树,是由来已久的习惯,当初计算科学家高纳德曾经试图改变这个习惯,结果发现没几个月,就徒劳无功了,最后不了了之。

常用的二叉树存储,一般是数组或者链表。它是一种非线性表的数据结构,所以当你学完“图”后,会发现,咦长得可真像啊。

二叉树的遍历

先序遍历

中序遍历

后序遍历

层序遍历



emmm


实际上的存储

现以中序遍历来看看它究竟是怎么实现的,这里涉及到程序中的单线程,说白了,就是一件事非要做完,再做另一件。



当node不是空节点时,则会从23-->16-->3,这是只会执行inOrder(node.left),然后下一步,node.show()-->3;再inOrder(node.right),直接返回,到上一级node节点(16)的那个,这个过程类似栈的后入先出(LIFO,last-in-first-out)过程

而(不)完全二叉树,则会依据数组的存储是否满了,来判断是否是个好“树”,这个下次再聊聊。

二叉树的优缺点

二叉树中的数据是有序的,在O(n)的时间复杂度中,可以输出其性能更为稳定,平衡二叉树作为二叉树的升级版可以弥补其平衡性。

而哈希表(散列表),由于其中的数据是无须的,每次增查删改时,可能出现元素之间的冲突(虽然概率很小,2^65),但是所费的时间,所考虑的范围往往比二叉树多。

开发中,充分结合需求,扬长避短即可。

二叉树实现及可视化:https://www.bilibili.com/video/av9343349?from=search&seid=15629247604702884278

wiki:二叉树

部分图片来源:百度 谷歌

js部分源代码实现:https://github.com/Jiangjao/python_learn_demo/tree/master

你可能感兴趣的:(优雅的二叉树)