标签:二叉搜索树 ups rar 节点 ova actor 存储 trie class
前序(Pre-order):根-左-右
中序(In-order):左-根-右
后序(Post-order):左-右-根
def preorder(self, root):
if root:
self .traverse_path.append(root.val)
self .preorder(root.left)
self .preorder(root.right)
def inorder(self, root):
if root:
self .inorder(root.left)
self .traverse_path.append(root.val)
self .inorder(root.right)
def postorder(self, root):
if root:
self .postorder(root.left)
self .postorder(root.right)
self .traverse_path.append(root.val)
二叉搜索树,也称二叉搜索树、有序二叉树(Ordered Binary Tree)、 排序二叉树(Sorted Binary Tree),是指一棵空树或者具有下列性质的 二叉树:
中序遍历:升序排列
保证二维维度! —> 左右子树结点平衡(recursively)
Balanced
https://en.wikipedia.org/wiki/Selfbalancing_binary_search_tree
发明者 G. M. Adelson-Velsky 和 Evgenii Landis
Balance Factor(平衡因子): 是它的左子树的高度减去它的右子树的高度(有时相反)。 balance factor = {-1, 0, 1}
通过旋转操作来进行平衡(四种)
https://en.wikipedia.org/wiki/Selfbalancing_binary_search_tree
左旋
右旋
左右旋
右左旋
子树形态:右右子树 —> 左
子树形态:左左子树 —> 右旋
子树形态:左右子树 —> 左右旋
子树形态:右左子树 —> 右左
平衡二叉搜索树
每个结点存 balance factor = {-1, 0, 1}
四种旋转操作
不足:结点需要存储额外信息、且调整次数频繁
红黑树是一种近似平衡的二叉搜索树(Binary Search Tree),它能够确保任何一 个结点的左右子树的高度差小于两倍。具体来说,红黑树是满足如下条件的二叉搜 索树:
每个结点要么是红色,要么是黑色
根节点是黑色
每个叶节点(NIL节点,空节点)是黑色的。
不能有相邻接的两个红色节点
从任一节点到其每个叶子的所有路径都包含相同数目的黑色节点。
从根到叶子的最长的可能路径不多于最短的可能路径的两倍长。
AVL trees provide?faster lookups?than Red Black Trees because they are more strictly balanced.
Red Black Trees provide?faster insertion and removal?operations than AVL trees as fewer rotations are done due to relatively relaxed balancing.
AVL trees store?balance factors or heights?with each node, thus requires storage for an integer per node whereas Red Black Tree requires only 1 bit of information per node.
Red Black Trees are used in most of the language libraries like?map,?multimap,?multisetin C++ whereas AVL trees are used in?databases?where faster retrievals are required.
标签:二叉搜索树 ups rar 节点 ova actor 存储 trie class
原文地址:https://www.cnblogs.com/liugangjiayou/p/12590277.html