通过JavaScript刨析二叉树01

71 阅读2分钟

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

概念

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

二叉树

树(Tree)这种结构,最经典最简单得数据结构属于二叉树,每个节点都它的left左子树right右子树,两个分叉,这个就是二叉树结构。

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

如果有一个节点是空节点,可以称作为空二叉树,如果只有一个节点二叉树,它的左子树和右子树是空的,称作为根节点。

在前端中可以理解为:每个节点都有是一个Node,每个Node内有Value值,Left左子树,right右子树、树对象Tree在内包括增删改遍历等操作记录

相同树判定

给定两个二叉树qp,判定他们两个是否相同,在内的TreeNode构造函数有两个属性valueleft、right 如果PQ都是空二叉树,那么他们相等

if(q == null && p == null){
  return true
}

如果有一个是空的,另外一个不是则不相等

if(q == null || p == null){
  return false
}

如果两个节点的value值,那么也不相等

if(q.value != p.value){
  return false
}

如果三种情况都不满足,则他们两个相等,但是不能直接判定这两个相等,而是需要通过递归进行验证左右子树,既然是递归则需要把判定条件封装到一个函数内来供递归调用

function isTree(q,p){
  return isTree(q.left,p.left) && isTree(p.right,q.left)
}

分别把比对这两个二叉树的左子树和右子树相比较,并进行return递归调用

最后

树基本上天生是一个递归的结构,针对某个子元素,无法判断这棵树到底有多少子元素,只能通过递归加上相同的逻辑来处理