什么是二叉树
今天在做百度前端技术学院的任务时,遇到一题涉及二叉树算法的,然而我是一脸懵逼,因为没接触过二叉树算法,所以无存下手。后来上网找资料,渐渐明白了是个什么东西。
搞清楚了二叉树是啥,然后怎么实现呢,显然,我需要用js实现,于是又各种找资料,实话说,资料还挺多的,不过也很杂,现在做个总结。
js实现二叉树
说明:将一个数组的值按照二叉树规则遍历,形成二叉树结构。
代码如下:
1 |
|
上面代码最终形成的二叉树结构如下图:
规则说明:
根据取到的数组值,先判断二叉树中根节点是否存在,如果不存在,就将第一个值作为根节点,即上述的8是根节点值。
有了根节点后,再判断后面的值与根节点值大小关系。如果小于根节点值,且左边无值,就放在左边,如果左边已经有值,就回调遍历。如果大于根节点值,且右边无值,就放在右边,如果右边已经有值,就回调遍历。参考上面代码中
insertNode
函数
遍历
二叉树的遍历(traversing binary tree)是指从根结点出发,按照某种次序依次访问二叉树中所有结点,使得每个结点被访问一次且仅被访问一次。
二叉树的遍历有三种方式,如下:
前序遍历(DLR),首先访问根结点,然后遍历左子树,最后遍历右子树。简记根-左-右。
中序遍历(LDR),首先遍历左子树,然后访问根结点,最后遍历右子树。简记左-根-右。
后序遍历(LRD),首先遍历左子树,然后遍历右子树,最后访问根结点。简记左-右-根。
在上述代码中的BinaryTree()
中添加遍历接口( … 表示省略的代码 ):
中序遍历
1 |
|
前序遍历
1 |
|
后序遍历
1 |
|
注意:遍历代码是写在BinaryTree()
中的,部分代码已省略