持续创作,加速成长!这是我参与「掘金日新计划 · 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在内包括增删改遍历等操作记录
相同树判定
给定两个二叉树q和p,判定他们两个是否相同,在内的TreeNode构造函数有两个属性value和left、right
如果P和Q都是空二叉树,那么他们相等
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递归调用
最后
树基本上天生是一个递归的结构,针对某个子元素,无法判断这棵树到底有多少子元素,只能通过递归加上相同的逻辑来处理