目录 简介 AVL的特性 AVL的构建 AVL的搜索 AVL的插入 AVL的删除 简介 平衡二叉搜索树是一种特殊的二叉搜索树.为什么会有平衡二叉搜索树呢? 考虑一下二叉搜索树的特殊情况,如果一个二叉搜索树所有的节点都是右节点,那么这个二叉搜索树将会退化成为链表.从而导致搜索的时间复杂度变为O(n),其中n是二叉搜索树的节点个数. 而平衡二叉搜索树正是为了解决这个问题而产生的,它通过限制树的高度,从而将时间复杂度降低为O(logn). AVL的特性 在讨论AVL的特性之前,我们先介绍一个概念叫做平…
package com.sunshine.AlgorithmTemplate; import com.sunshine.OFFER66_SECOND.BalanceTreeNode; import com.sunshine.OFFER66_SECOND.TreeUtility; import org.junit.Test; public class BalanceTreeTemplate { @Test public void test() { insert(5); insert(2); ins…
//AVTree.h #ifndef MY_AVLTREE_H #define MY_AVLTREE_H typedef int ElementType; struct TreeNode { ElementType data; struct TreeNode *left; struct TreeNode *right; int height; }; typedef struct TreeNode TreeNode; typedef TreeNode *Tree; Tree Find(Elemen…
背景 很多场景下都需要将元素存储到已排序的集合中.用数组来存储,搜索效率非常高: O(log n),但是插入效率比较低:O(n).用链表来存储,插入效率和搜索效率都比较低:O(n).如何能提供插入和搜索效率呢?这就是二叉搜索树的由来,本文先介绍非平衡二叉搜索树. 非平衡二叉搜索树 规则 所有节点的左节点小于节点,所有节点的右节点大于等于自身,即:node.value >  node.left.value && node.value <= node.right.value. 示例…
查找是指在一批记录中找出满足指定条件的某一记录的过程,例如在数组{ 8, 4, 12, 2, 6, 10, 14, 1, 3, 5, 7, 9, 11, 13, 15 }中查找数字15,实现代码很简单: int key = 15; int[] datas = new int[] { 8, 4, 12, 2, 6, 10, 14, 1, 3, 5, 7, 9, 11, 13, 15 }; for(int i = 0; i < datas.length; i++) { if(datas[i] == …
1.二叉搜索树 1.1定义 是一棵二叉树,每个节点一定大于等于其左子树中每一个节点,小于等于其右子树每一个节点 1.2插入节点 从根节点开始向下找到合适的位置插入成为叶子结点即可:在向下遍历时,如果要插入的值比节点的值小,则向节点的左子树遍历,大于等于则向右子树遍历,如此循环. 1.3删除节点 删除节点x有3种情况: 1.x是叶子结点,则直接删除: 2.x只有一棵子树(左子树或者右子树),则直接将x的父结点指向x的孩子,再删除x节点,如果x是根结点,则要更新x的孩子为树根: 3.x有两棵子树,则…
手写AVL平衡二叉搜索树 二叉搜索树的局限性 先说一下什么是二叉搜索树,二叉树每个节点只有两个节点,二叉搜索树的每个左子节点的值小于其父节点的值,每个右子节点的值大于其左子节点的值.如下图: 二叉搜索树,顾名思义,它的搜索效率很高,可以达到O(logn).但这是理想状况下的,即上图所示.实际上,由于插入顺序的原因,形成的二叉搜索树并不会像上图这样"工整",最坏的情况的下,甚至可能会退化成链表了,如下图: 这显然不是我们想要看的结果,那么我们必须要引入一套机制来避免这种事情的发生,也就是…
Given a singly linked list where elements are sorted in ascending order, convert it to a height balanced BST. For this problem, a height-balanced binary tree is defined as a binary tree in which the depth of the two subtrees of every node never diffe…
第108题 将一个按照升序排列的有序数组,转换为一棵高度平衡二叉搜索树. 本题中,一个高度平衡二叉树是指一个二叉树每个节点 的左右两个子树的高度差的绝对值不超过 1. 示例: 给定有序数组: [-10,-3,0,5,9], 一个可能的答案是:[0,-3,9,-10,null,5],它可以表示下面这个高度平衡二叉搜索树: 0 / \ -3 9 / / -10 5 来源:力扣(LeetCode) 链接:https://leetcode-cn.com/problems/convert-sorted-a…
树-二叉搜索树-AVL树 树 树的基本概念 节点的度:节点的儿子数 树的度:Max{节点的度} 节点的高度:节点到各叶节点的最大路径长度 树的高度:根节点的高度 节点的深度(层数):根节点到该节点的路径长度 树的遍历 ·前序遍历:根左右(x,Tl,Tr) ·中序遍历:左根右(Tl,x,Tr) ·后序遍历:左右根(Tl,Tr,x) 树的表示法 1.父节点数组表示法 (寻找父节点O(1),寻找儿子节点O(n)) 2.儿子链表表示法 (为克服找父节点不方便,可牺牲空间换时间:) 3.左儿子右兄弟表示法…