ios 开发

树、二叉树

2023-02-02  本文已影响0人  iOS小洁

树的概念

节点、根节点、父节点、子节点、兄弟节点 、子树、左子树、右子树、空树

节点的度(degree):子树的个数

树的度:所有节点度中的最大值

叶子节点(leaf):度为 0 的节点

非叶子节点:度不为 0 的节点

层数(level):根节点在第 1 层,根节点的子节点在第 2 层,以此类推(有些教程也从第 0 层开始计算)

节点的深度(depth):从根节点到当前节点的唯一路径上的节点总数

节点的高度(height):从当前节点到最远叶子节点的路径上的节点总数

树的深度:所有节点深度中的最大值

树的高度:所有节点高度中的最大值

树的深度 等于 树的高度

有序树 树中任意节点的子节点之间有顺序关系

无序树 树中任意节点的子节点之间没有顺序关系 也称为“自由树”

森林 由 m(m ≥ 0)棵互不相交的树组成的集合

二叉树

二叉树的特点 每个节点的度最大为 2(最多拥有 2 棵子树) 左子树和右子树是有顺序的 即使某节点只有一棵子树,也要区分左右子树

二叉树的性质

非空二叉树的第 i 层,最多有 2的(i-1)次方个节点( i ≥ 1 )

在高度为 h 的二叉树上最多有 2 的h次方 − 1 个结点( h ≥ 1 )

对于任何一棵非空二叉树,如果叶子节点个数为 n0,度为 2 的节点个数为 n2,则有: n0 = n2 + 1

假设度为 1 的节点个数为 n1,那么二叉树的节点总数 n = n0 + n1 + n2

二叉树的边数 T = n1 + 2 * n2 = n – 1 = n0 + n1 + n2 – 1

因此 n0 = n2 + 1

真二叉树 / Full Binary Tree:完满二叉树

所有节点的度都要么为 0,要么为 2

满二叉树 / Perfect Binary Tree:完美二叉树

所有节点的度都要么为 0,要么为 2。且所有的叶子节点都在最后一层

在同样高度的二叉树中,满二叉树的叶子节点数量最多、总节点数量最多

满二叉树一定是真二叉树,真二叉树不一定是满二叉树

完全二叉树 / Complete Binary Tree:完全二叉树

叶子节点只会出现最后 2 层,且最后 1 层的叶子结点都靠左对齐

完全二叉树从根结点至倒数第 2 层是一棵满二叉树

满二叉树一定是完全二叉树,完全二叉树不一定是满二叉树

同样节点数量的二叉树,完全二叉树的高度最小

题目

如果一棵完全二叉树有 768 个节点,求叶子节点的个数 
假设叶子节点个数为 n0,度为 1 的节点个数为 n1,度为 2 的节点个数为 n2 
总结点个数 n = n0 + n1 + n2,而且 n0 = n2 + 1 n = 2n0 + n1 – 1

完全二叉树的 n1 要么为 0,要么为 1 
n1为1时,n = 2n0,n 必然是偶数 
叶子节点个数 n0 = n / 2,非叶子节点个数 n1 + n2 = n / 2
n1为0时,n = 2n0 – 1,n 必然是奇数
叶子节点个数 n0 = (n + 1) / 2,非叶子节点个数 n1 + n2 = (n – 1) / 2

叶子节点个数 n0 = floor( (n + 1) / 2 ) = ceiling( n / 2 ) 
非叶子节点个数 n1 + n2 = floor( n / 2 ) = ceiling( (n – 1) / 2 )
因此叶子节点个数为 384

二叉树遍历

前序遍历(Preorder Traversal) 中序遍历(Inorder Traversal) 后序遍历(Postorder Traversal) 层序遍历(Level Order Traversal)

前序:根 - 左 - 右

中序:左 - 根 - 右

后序:左 - 右 - 根

层序:上到下,左到右,使用队列

前驱节点(predecessor)

前驱节点:中序遍历时的前一个节点

如果是二叉搜索树,前驱节点就是前一个比它小的节点

后继节点(successor)

后继节点:中序遍历时的后一个节点

如果是二叉搜索树,后继节点就是后一个比它大的节点

二叉搜索树

二叉搜索树是二叉树的一种,是应用非常广泛的一种二叉树,英文简称为 BST 。又被称为:二叉查找树、二叉排序树

它的左右子树也是一棵二叉搜索树

二叉搜索树存储的元素必须具备可比较性

添加、删除、搜索的最坏时间复杂度均可优化至:O(logn)

平衡二叉搜索树(Balanced Binary Search Tree)

一棵达到适度平衡的二叉搜索树,可以称之为:平衡二叉搜索树,自平衡二叉树

常见平衡二叉搜索树:AVL树,红黑树

平衡因子(Balance Factor)

平衡因子(Balance Factor):某结点的左右子树的高度差

二叉树练习

226. 翻转二叉树

二叉树高度

判断是否是完全二叉树

144. 二叉树的前序遍历

94. 二叉树的中序遍历

145. 二叉树的后序遍历

102. 二叉树的层序遍历

104. 二叉树的最大深度

107. 二叉树的层序遍历 II

662. 二叉树最大宽度

589. N 叉树的前序遍历

590. N 叉树的后序遍历

559. N 叉树的最大深度

114. 二叉树展开为链表

106. 从中序与后序遍历序列构造二叉树

105. 从前序与中序遍历序列构造二叉树

889. 根据前序和后序遍历构造二叉树

101. 对称二叉树

450. 删除二叉搜索树中的节点

700. 二叉搜索树中的搜索

701. 二叉搜索树中的插入操作

98. 验证二叉搜索树

530. 二叉搜索树的最小绝对差

783. 二叉搜索树节点最小距离

108. 将有序数组转换为二叉搜索树

938. 二叉搜索树的范围和

235. 二叉搜索树的最近公共祖先

230. 二叉搜索树中第K小的元素

173. 二叉搜索树迭代器

99. 恢复二叉搜索树

110. 平衡二叉树

上一篇下一篇

猜你喜欢

热点阅读