算法学习之二叉排序树的平衡化

二叉排序树与平衡二叉树的实现 一、实验目的1、问题描述     分别采用二叉链表和顺序表作存储结构,实现对二叉排序树与平衡 二叉树的操作。2、设计功能要求(1)用二叉链表作存储结构实现二叉排序树。      1)以回车符(‘\n’)为输入结束标志,输入数列L,生成一棵二叉排序 树T;      2)对二叉排序树T作中序遍历,输出结果;      3)计算二叉排序树T查找成功的平均查找长度,输出结果;      4)输入元素x,... 阅读详情

首先提出问题:问什么要让二叉树排序树平衡化

比如给出{1,2,3,4,5,6,7}让我们将其构造成排序树,如下图

可以看出,此时二叉树变成了数组,而我们为了提高搜索效率的初衷也被打破了

为了解决这种极端情况,我们需要对二叉树进行平衡化

概念

  • 每个节点的左子树和右子树的高度差至多为一

  • 必须是二叉查找树

  • 高度是从根节点到目标节点的层数

思路

我们需要查询出从根节点开始其左右子节点的高度

  • 若左子树的高度-右子树高度>1,该节点右旋

  • 若右子树的高度-左子树高度>1,该节点左旋

  • 右旋的步骤

    • 让该节点的左节点更为新的根结点,即该节点的左子节点指向左子树的右子树,该节点的左子树的右子节点指向该节点,在用父节点指向新的节点

  • 左旋的步骤

    • 让该节点的右节点更为新的根结点,即该节点的右子节点指向右子树的左子树,该节点的右子树的左子节点,指向该节点,在用父节点指向新的节点

 进行右旋时,节点左子树的右子树高度大于左子树的左子树高度时,其左子树要先左旋,既保证左子树高度大于右子树高度

进行左旋时,节点右子树的左子树高度大于右子树的右子树高度时,其右子树要先右旋,既保证右子树高度大于左子树高度

代码


class BinaryNode {

    /**
     * 查找父节点
     * @param node
     * @return
     */
    public BinaryNode getFatherNode(BinaryNode node) {
        BinaryNode node1 = null;
        if (this.left != null) {
            if (this.left == node) {
                node1 = this;
                return node1;
            }else {
                node1 = this.left.getFatherNode(node);
            }
        }
        if (node1 != null) {
            return node1;
        }
        if (this.right != null) {
            if (this.right == node) {
                node1 = this;
                return node1;
            }else {
                node1 = this.right.getFatherNode(node);
            }
        }
        return node1;
    }

    /**
     * 查询节点的高度
     * @return 该节点的高度
     */
    public int highOfNode() {
       return Math.max(left == null ? 0 : left.highOfNode(),right == null ? 0 : right.highOfNode()) + 1 ;
    }

    /**
     * 左子树的高度
     * @return 如果左节点为空,返回0,反之返回高度
     */
    public int leftHigh() {
        if (this.left == null) {
            return 0;
        }else {
            return left.highOfNode();
        }
    }

    /**
     * 右子树的高度
     * @return 如果右节点为空,返回0,反之返回高度
     */
    public int rightHigh() {
        if (this.right == null) {
            return 0;
        }else {
            return right.highOfNode();
        }
    }
}
class BinarySortTree {

    /**
     * 左旋转,使根结点的右节点成为新的根结点,原来根结点的右节点指向新根节点的左节点
     * 这样可以使当前树的左子树高度加一,右子树高度减一
     */
    public void leftRotation(BinaryNode node){
        // 方案一
        // 1.创建一个新的节点,newNode值等于根节点的值
//        BinaryNode node = new BinaryNode(root.getValue());
//        // 2.把新节点的左子树设置为根节点的左子树
//        node.left = root.left;
//        // 3.把新节点的右子树设置为根结点的右子树的左子树
//        node.right = root.right.left;
//        // 4.把根结点的值换为右子节点的值
//        root.setValue(root.right.getValue());
//        // 5.把根节点的右子树设置为右子树的右子树
//        root.right = root.right.right;
//        // 6.把当前节点的左子树设置为新节点
//        root.left = node;
        // 方案2
        // 找到其父节点
        boolean flag = true;
        BinaryNode fatherNode = getFatherNode(node);
        if (fatherNode != null && fatherNode.left != null && fatherNode.left == node) {
            flag = false;
        }
        // 左旋,该节点的右子树指向右子树的左子树,该节点的右子树的左子树,指向该节点,在用父节点指向新的节点
        BinaryNode index = node;
        BinaryNode newNode = node.right;
        node.right = newNode.left;
        newNode.left = index;
        if (node == root) {
            root = newNode;
        }else if (flag) {
            fatherNode.right = newNode;
        }else {
            fatherNode.left = newNode;
        }
    }


    /**
     * 右旋转,使根结点的左节点成为新的根结点,原来根结点的左节点指向新根节点的右节点
     * 这样可以使当前树的左子树高度减一,右子树高度加一
     */
    public void rightRotation(BinaryNode node) {
        boolean flag = true;
        BinaryNode fatherNode = getFatherNode(node);
        if (fatherNode != null && fatherNode.left != null && fatherNode.left == node) {
            flag = false;
        }
        BinaryNode index = node;
        BinaryNode newNode = node.left;
        node.left = newNode.right;
        newNode.right = index;
        if (node == root) {
            root = newNode;
        }else if (flag) {
            fatherNode.right = newNode;
        }else {
            fatherNode.left = newNode;
        }
    }

    /**
     * 顺序二叉树平衡化,平衡化是指每个节点的左子树和右子树的高度差至多为一
     * @param node
     */
    public void avl(BinaryNode node) {
        // 当左子树高度 - 右子树高度 > 1时,右旋,使左子树高度减一,右子树高度加一
        if ((node.leftHigh() - node.rightHigh()) > 1) {
            // 当节点左子树的右子树高度大于左子树的左子树高度时,其左子树要先左旋,既保证左子树高度大于右子树高度
            if (node.left != null && node.left.rightHigh() > node.left.leftHigh()) {
                leftRotation(node.left);
                rightRotation(node);
            }else {
                rightRotation(node);
            }
        }
        // 当右子树高度 - 左子树高度 > 1时,左旋,使右子树高度减一,左子树高度加一
        if ((node.rightHigh() - node.leftHigh()) > 1) {
            // 当节点右子树的左子树高度大于右子树的右子树高度时,其右子树要先右旋,既保证右子树高度大于左子树高度
            if (node.right != null && node.right.leftHigh() > node.right.rightHigh()) {
                rightRotation(node.right);
                leftRotation(node);
            }else {
                leftRotation(node);
            }
        }
        if (node.left != null) {
            avl(node.left);
        }
        if (node.right != null) {
            avl(node.right);
        }
    }

}

平衡二叉排序树(完整案例详解及完整C代码实现) 写在前面:博主是一位普普通通的19届双非软工在读生,平时最大的爱好就是听听歌,逛逛B站。博主很喜欢的一句话花开堪折直须折,莫待无花空折枝:博主的理解是头一次为人,就应该做自己想做的事,做自己不后悔的事,做自己以后不会留有遗憾的事,做自己觉得有意义的事,不浪费这大好的青春年华。博主写博客目的是记录所学到的知识并方便自己复习,在记录知识的同时获得部分浏览量,得到更多人的认可,满足小小的成就感,同时在写博客的途中结交更多志同道合的朋友,让自己在技术的路上并不孤单。 目录: 1.平衡二叉树简介 2.二叉排序. 阅读详情

相关推荐

动态查找表之二叉排序树和平衡二叉树(图解+代码详解)

动态查找表:与静态查找表不同的是,动态查找表是在查找过程中动态生成的,即对于给定值key, 若表中存在其关键字等于key的记录,则查找成功返回,否则插入关键字等于key的记录。 主要分为:二叉排序树、平衡二叉树、B-和B+树。 我们这里主要分析讨论前两种。 二叉排序树 定义 定义:二叉排序树,又称二叉查找树。或者是一颗空树,或者是满足以下性质的二叉树: 若其左子树不空,则左子树上所有结点的值均小于它的根结点的值; 若其右子树不空,则右子树上所有结点的值均大于它的根结点的值 其左、右子树也分别为二叉排序树

LRY89757的博客 3483

平衡二叉树(AVL)平衡化旋转详解

平衡二叉树的全称是平衡二叉排序树,也称为AVL树,这是因为该树结构是由Adelson-Velskii和Landis在1963年提出的。AVL树是BST树的改进结构,使得平均查找长度得到了减少,进而提高了查找的效率。

sunnyoldboy博客 5423

【查找算法】二叉排序树查找法

本篇文章将介绍二叉排序树的查找算法。 文章目录何为二叉排序树查找?查找算法实现查找效率分析二叉排序树的插入操作二叉排序树的生成操作二叉排序树的删除操作 何为二叉排序树查找? 上篇文章我们学习了折半查找,虽然折半查找算法将查找效率提高了,但是折半查找要求序列有序,所以当表插入、删除操作频繁的时候,为了维护表的有序性,就需要移动大量的元素,此时用折半查找显然事倍功半了。 那么有没有一种办法能够让查...

。。。 5036

【数据结构】二叉排序树——平衡二叉树的调整

平衡二叉树的调整

verse_armour的博客 1万+

别再手动续期SSL证书了!用acme.sh配合阿里云DNS API,实现全自动HTTPS证书管理

本文详细介绍了如何使用acme.sh配合阿里云DNS API实现SSL/TLS证书的全自动管理,彻底解决手动续期带来的风险与不便。通过自动化部署流程,包括环境准备、API集成、多域名证书申请等关键步骤,帮助运维人员构建高效、可靠的HTTPS证书管理体系,显著提升安全性和运维效率。

weixin_29200485的博客 271

用户和实体行为分析(UEBA)基础指南及解决方案

用户和实体行为分析(UEBA)或异常检测是一种网络安全技术,它使用机器学习(ML)算法来检测网络中用户、主机和其他实体的异常活动。

ITmoster的博客 2893

数据结构之平衡二叉树的平衡调整

本文章主要说明平衡二叉树的平衡调整,即LL型,RR型,LR型,RL型调整方法,和在程序中如何判断不平衡类型是LL型,RR型,LR型还是RL型

qq_57541265的博客 7195

MacOS上如何修改jupyter book的默认打开地址以及如何复制文件路径

记点笔记,才换新系统小半年,还是不太熟悉,所以记录一下笔记,感觉之后也会用到,希望能帮到你们。主要内容是:修改jupyter的默认地址以及复制文件路径。

魔仙的博客 1978

平衡二叉树(AVL)分析与实现

一、平衡二叉树的简介 平衡二叉树的缩写为AVL树,它是一种高度平衡的二叉搜索树,对于平衡二叉树来说,它满足两个基本约束: (1)二叉搜索树的约束:对于任意一个节点,左子树的关键字都小于根节点,右子树的关键字都大于根节点 (2)平衡性约束:对于任意一个节点,左右孩子的高度之差的绝对值不超过1 1.1 相关概念 高度 平衡二叉树的高度定义和普通树的高度定义相同:树的中某个节点高度定义为:从该节点出发,到其可达的最远的那个叶子节点的路径中的边数。空节点的高度定义为-1,叶子节点的高度定义为0 平衡因子

西城风雨楼 998

使用ZYNQ芯片和LVGL框架实现用户高刷新UI设计系列教程(第七讲)

默认是第一种键盘模式,当需要切换模式,进入到ta_event_cb函数修改模式,下面代码以数字模式举例子lv_keyboard_set_mode(kb, LV_KEYBOARD_MODE_NUMBER);在该界面中可以设置键盘文字的大小和文本类型,最下方判断键盘是否支持中文输入(中文输入,当汉字库不够大时,用户点击中文输入会少很多字)。//当LV_USE_KEYBOARD为1时启用虚拟键盘,LV_USE_ZH_KEYBOARD为1时支持中文输入。随后在系统设置界面中点击项目选项,选择显示键盘。

weixin_38828382的博客 1416

SAP-ML章<<<<第二节:物料账报错处理ABAP编程错误:RAISE_EXCEPTION>>>>

#SAP-ML章<<<<第一节:物料账报错处理ABAP编程错误:RAISE_EXCEPTION>>>> 1.物料账报错提示: ABAP编程错误:RAISE_EXCEPTION ABAP程序:SAPLFCML4H_RUN_PRICES应用组件CO-PC-ACT 2. 物料账报错背景: CKMLCP运行结算时 3. 解决方案: 通过DEBUG查看错误的地方 OKTZ:分析原因为:可能打包或者配置传输时弄错 ...

SAP.David.Gao的博客 1858

平衡二叉树(AVL)

平衡二叉树的定义 (AVL—— 发明者为Adel'son-Vel'skii 和 Landis)   平衡二叉查找树,又称 AVL树。 它除了具备二叉查找树的基本特征之外,还具有一个非常重要的特点:它 的左子树和右子树都是平衡二叉树,且左子树和右子树的深度之差的绝对值(平衡因子 ) 不超过1。 也就是说AVL树每个节点的平衡因子只可能是-1、0和1(左子树高度减去右子树高度)。  

u011101683的专栏 705

Ubuntu 22.04/24.04 安装 ROS2 完整教程(Humble / Jazzy)

最后更新:2026年2月适用系统:Ubuntu 22.04 LTS(Jammy) / Ubuntu 24.04 LTS(Noble)适用架构:x86_64 / arm64(包括树莓派)

2401_84116277的博客 6022

查找算法之二叉排序树

文章目录二叉排序树定义及性质二叉排序树的存储结构二叉排序树的递归查找查找分析二叉排序树平均查找长度 二叉排序树 定义及性质 二叉排序树(Binary Sort Tree)又称为二叉搜索树、二叉查找树。 定义: 二叉排序树或是空树,或是满足如下性质的二叉树: (1)若其左子树非空,则左子树上所有结点的值均小于根结点的值; (2)若其右子树非空,则右子树上所有结点的值均大于等于根结点的值; (3)其左右子树本身又各是一棵二叉排序树 二叉排序树的性质: 中序遍历非空的二叉排序树所得到的数据元素序列是一个按关键字

diviner_s的博客 3319

【车载以太网测试从入门到精通】系列文章目录汇总

物理层测试、数据链路层测试、以太网交换机测试、网络层测试、传输层测试、以太网TCP/IP协议自动化测试、以太网网络管理测试、以太网网络管理自动化测试、鲁棒性测试、SOME/IP测试、SOMEI/IP服务接口自动化测试、DoIP诊断测试、DoIP诊断自动化测试、DoIP BootLoader刷写、以太网网关路由测试、以太网网关路由自动化测试、AVB测试。

测试领域技术分享 3162

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

二叉排序树、平衡二叉树、红黑树、B树、B+树

全民制作人们,大家好。我是练习时长两天半的个人练习册,喜欢B树,B+树,BST树, AVL树,来redblack~

24考研人晴落的博客 1万+

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

[数据结构与算法] 二叉排序树之平衡二叉排序树

文章目录二叉排序树1. 二叉排序树2. 平衡二叉排序树 二叉排序树 1. 二叉排序树 二叉排序树的检索 def bt_search(btree, key): bt = btree: while bt: if key < bt.val: bt = bt.left elif key > bt.val: ...

阿辉的博客 1688

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

平衡二叉树之二叉排序树

最近写了点题目,用到平衡二叉树,以后看过,但是现在完全不记得了......可能以后去面试也要写到平衡二叉树的....重新学习一下..... 平衡二叉树是在二叉排序树的基础上成立的,所以先来弄一下二叉排序树。 二叉排序树或者是一棵空树,或者是具有下列性质的二叉树:(其实就是子节点比结点大或等于的就放结点右边,小的放左边) (1)若左子树不空,则左子树上所有结点的值均

zhi8zhi1zhi的专栏 698

平衡的二叉排序树

平衡的二叉排序树 问题:依次输入表(30,15,28,20,24,10,68,35,50)中的元素,生成一棵平衡的二叉排序树。请画出构造过程,并在其中注明每一次平衡化的类型(LL型、RR型、LR型、RL型) 题目解析 本题考查的是二叉排序树和二叉平衡树的相关知识点。首先,二叉排序树(又叫二叉搜索树)默认服从左小右大的树形排序结构,在一般情况下,查询效率比链表结构要高。并且服从以下性质: (1)若左子树不空,则左子树上所有结点的值均小于它的根结点的值; (2)若右子树不空,则右子树上所有结点的值均大于它的根结

qq_45627719的博客 1922

数据结构学习笔记之二叉排序树、平衡二叉树和最优带权二叉树

本文学习二叉树的一些典型应用,包括二叉排序树、平衡二叉树和最优带权二叉树,具体内容见文。

御承扬的博客 2748

26. 平衡二叉排序树

平衡二叉排序树的生成,查找和删除

dugudaibo的博客 2万+

二叉排序树 与 平衡二叉树

二叉排序树:根节点值大于树的左叶子结点值,且根节点值小于右叶子节点值 平衡二叉树:1.平衡二叉树是二叉排序树,是二叉排序树的改良版,相同序列平衡二叉树的高度小于或等于二叉排序数的 高度, 所以平衡二叉树的查找比二叉排序树快。但平衡二叉树的创建过程,保证二叉树平衡调整次数较多。 2.平衡二叉树的左右叶子结点高...

hi_sir_destroy的博客 4376

查找——树表之二叉排序树

这篇文章就介绍一下关于树表的查找方法。我们知道,当表插入、删除操作频繁时,为维护表的有序性,需要移动表中很多记录。所以改用动态查找表——几种特殊的树,我们主要介绍二叉排序树与平衡二叉树。

Blusher1的博客 1701

408数据结构学习笔记——二叉排序树、二叉平衡树、红黑树

1.二叉排序树 2.平衡二叉树 3.红黑树 4.王道课后题

JiangNan_1002的博客 6164

数据结构之二叉排序树

二叉排序树一、二叉排序树的定义二、二叉排序树的查找算法三、二叉排序树的插入算法四、二叉排序树的删除算法五、二叉排序树性能分析 一、二叉排序树的定义 二叉排序树又称“二叉查找树”、“二叉搜索树” 一棵空树,或者是具有下列性质的二叉树: (1)若左子树不空,则左子树上所有结点的值均小于它的根结点的值; (2)若右子树不空,则右子树上所有结点的值均大于它的根结点的值; (3)左、右子树也分别为二叉排序树; (4)没有键值相等的结点。 二叉排序树通常采用二叉链表作为存储结构。中序遍历二叉排序树可得到一个依据关

weixin_43520450的博客 2098
上一篇: 算法学习之二叉排序树
下一篇: 算法学习之最优二叉树(赫夫曼树)
管管儿
博客等级 码龄7年 1粉丝 11原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值