二叉树
title: 二叉树 id: 3c554a35588e0b381d124fff75438783 tags: [] date: 2000/01/01 00:00:00 updated: 2021/03/01 17:32:18 isPublic: true --#|[分隔]|#--
二叉树
定义
二叉树(Binary tree)
完全二叉树(Complete Binary Tree):子节点从上往下、从左往右依次排列,中间没有跳过的项
满二叉树(Full Binary tree):除最后一层无任何子节点外,每一层上的所有结点都有两个子结点的二叉树
满二叉树肯定是完全二叉树,满二叉树是完全二叉树的一个特例
二叉搜索树/二叉查找树/二叉排序树(Binary Search Tree)(BST):每一个节点,它如果有子节点,那么它左侧的所有子节点的值都比他小,右侧的所有子节点的值都比它大。
平衡树(Balance Tree)(BT):根节点左侧的层数F_L和右侧的层数F_R,(F_L - F_R)的绝对值小于等于1,也就是左侧和右侧的层级相差最多差一层。
不平衡的二叉树想平衡,需要调整结构,整体的结构变化,需要控制数左旋或右旋,左边层数少就往左旋,右边层数少就往右旋,旋的层级就看两边相差几层。
有时遇到复杂一些的不平衡树,需要旋转多次。
二叉堆:是一种特殊的堆,结构是完全二元树,有且仅有下面两种结构
最大堆/大堆顶:父节点的值,大于等于它的子节点,导致堆顶(根节点)最大
最小堆/小堆顶:父节点的值,小于等于它的子节点,导致堆顶(根节点)最小
应用
二叉树使用一维数组表示,比如二叉树中的某个节点的数据,存放在数组中的索引值为n,那么:
当前节点索引值: 「n」
父节点索引值:「Math.floor((n - 1) / 2)」
左子节点的索引值:「2n + 1」
右子节点的索引值:「2n + 2」
Last updated
Was this helpful?