题目描述 将一个按照升序排列的有序数组,转换为一棵高度平衡二叉搜索树。 本题中,一个高度平衡二叉树是指一个二叉树每个节点 的左右两个子树的高度差的绝对值不超过 1。 示例: 给定有序数组: [-10,-3,0,5,9], 一个可能的答案是:[0,-3,9,-10,null,5],它可以表示下面这个高 ...
分类:
编程语言 时间:
2020-07-03 23:32:53
阅读次数:
67
108. 将有序数组转换为二叉搜索树 题目 将一个按照升序排列的有序数组,转换为一棵高度平衡二叉搜索树。 本题中,一个高度平衡二叉树是指一个二叉树每个节点 的左右两个子树的高度差的绝对值不超过 1。 示例: 给定有序数组: [-10,-3,0,5,9], 一个可能的答案是:[0,-3,9,-10,n ...
分类:
编程语言 时间:
2020-07-03 19:40:43
阅读次数:
72
将一个按照升序排列的有序数组,转换为一棵高度平衡二叉搜索树 时间复杂度:O(n) n为数组长度 空间复杂度:O(logn) class TreeNode: def __init__(self, x): self.val = x self.left = None self.right = None c ...
分类:
编程语言 时间:
2020-07-03 12:23:57
阅读次数:
63
红黑树(Red Black Tree)是一种自平衡的二叉搜索树(Self-balancing Binary Search Tree)。以前也叫做平衡二叉 B 树(Symmetric Binary B-tree)。 预备知识 树的知识框架结构如下图所示: 平衡二叉搜索树 平衡二叉搜索树(Balance ...
分类:
其他好文 时间:
2020-06-28 20:52:04
阅读次数:
53
AVL树 AVL树是平衡二叉搜索树,比普通二叉搜索树多了一个平衡功能; 当一个节点的左子树与右子树的高度差超过1时 ,就被认为是不平衡的。然后通过旋转二叉树维持平衡。 插入操作 左节点的左子树插入操作(单旋转)插入5号: 左节点的右子树插入操作(双旋转)插入5号: ] 删除操作: 需要删除一个节点时 ...
分类:
其他好文 时间:
2020-05-30 22:12:51
阅读次数:
79
题目: 将有序数组转换为二叉搜索树:将一个按照升序排列的有序数组,转换为一棵高度平衡二叉搜索树。 本题中,一个高度平衡二叉树是指一个二叉树每个节点 的左右两个子树的高度差的绝对值不超过 1。 思路: 因为输入是递增的数组,为了转换成二叉搜索树,因此需要找到整个树的根节点,之后使用递归来的得到每个子树 ...
分类:
编程语言 时间:
2020-05-19 10:54:56
阅读次数:
56
首先复习下二叉搜索树的定义: 在二叉搜索树中: 1.若任意结点的左子树不空,则左子树上所有结点的值均不大于它的根结点的值。 2. 若任意结点的右子树不空,则右子树上所有结点的值均不小于它的根结点的值。 3.任意结点的左、右子树也分别为二叉搜索树 总结一下就是,树的中序遍历可以得到一个升序序列。 那如 ...
分类:
其他好文 时间:
2020-05-07 00:57:57
阅读次数:
73
平衡二叉搜索树 二叉搜索树的问题: 添加:若从小到大添加元素,那么二叉搜索树将退化成链表 删除:删除节点时也可能会导致二叉搜索树退化成链表 平衡(Banlance) 平衡:当节点数量固定时,左右子树的高度越接近,这棵二叉树就越平衡(高度越低) 最理想的状态就是像完全二叉树、满二叉树那样,高度是最小的 ...
分类:
其他好文 时间:
2020-04-11 00:32:57
阅读次数:
70
平衡二叉搜索树(Balanced Binary Search Tree) 经典常见的自平衡的二叉搜索树(Self-balancing Binary Search Tree)有 ① AVL树 :Windows NT 内核中广泛使用 ② 红黑树:C++ STL(比如 map、set )Java 的 Tr ...
分类:
其他好文 时间:
2020-04-03 11:55:39
阅读次数:
71
题目: 给定一个有序整数数组,元素各不相同且按升序排列,编写一个算法,创建一棵高度最小的二叉搜索树。 示例:给定有序数组: [-10,-3,0,5,9], 一个可能的答案是:[0,-3,9,-10,null,5],它可以表示下面这个高度平衡二叉搜索树: 0 / \ -3 9 / / -10 5 分析 ...
分类:
其他好文 时间:
2020-03-06 15:13:39
阅读次数:
73