通过JavaScript刨析二叉树02

52 阅读2分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第17天,点击查看活动详情

概念

二叉树,树实际上是一种,链表得扩展,之前有得链表是单向得,如果这个链表不是单向得,它有多个指向(N),这就是一棵树(Tree),树得这种结构,不管是在工作还是生活都随处可见,比如文件夹得格式,公司得组织架构图,以及虚拟Dom等等。

反转二叉树

这个逻辑比较简单,如果有幸用的是MAC系统,推荐一个插件Brew install,和Npm install类似。

graph TB 
A[1]
A --> B[3] 
A --> C[2]
B --> E[5]
B --> F[4]
C --> D[5]
C --> G[4]

既然是递归,所以需要封装一个函数方法,供递归调用,并把这棵树当作参数传进去。

function inverIsTree(tree){}

如果当前Tree树的节点是空的,那么说明它不需要反转,则返回这颗树节点

if(tree == null){
    return tree
}

如果它不是空的,则开始执行递归,进行反转,tree参数是树形结构,也就是数组类型,则可以给它结构并获取它的左右子树

[tree.left,tree.right] = [inverIsTree(tree.right,tree.left)]

随后结构递归调用该方法传入右子树和左子树,这是也是一个赋值的过程

二叉树遍历逻辑

二叉树的结构是由根节点,慢慢往外延申,所以可分成前中后,三种遍历方式,每个节点实际上都是一个根节点current,还有leftright,当前的节点在这左右节点遍历的顺序

  1. 如果每次遍历先遍历自己,再到left随后再到right,这种成为前置遍历,

根节点 --> left --> right 先遍历根节点随后到左子树的根节点,一直这样到最下,随后遍历右子树根节点,再一直网上,遍历到最初的根节点

  1. 中置遍历为先遍历left,再到根节点,随后到right

left --> 根节点 --> right 先遍历左子树的左节点随后到左子树的根节点,一直到最下的左子树节点,随后遍历右子树根节点,再一直网上,遍历到最初的根节点

  1. 后置遍历为先遍历left,再到right,随后到根节点

left --> right --> 根节点