[学习记录]二叉树删除

二叉树删除涉及到多种情况,需要逐个处理

1.当前节点为叶子节点

  直接删除

2.当前节点右子树为空

  复制左子树中最大的值,用该值替代当前节点,删除左子树中原节点。

3.当前节点右子树不为空

  复制右子树中最小的值,用该值替代当前节点,删除右子树中原节点。

总结

  1.如果二叉树中存在大于等于或小于等于的关系,则需要根据情况选择是用右还是左,如果是严格大于小于的话左右都一样。

  2.由于替换节点时,对于被提拔的节点来说,原本的位置的处理和删除类似,因此可以将这个操作抽象出来,从而递归调用

  

原文地址:https://www.cnblogs.com/trickofjoker/p/10504944.html

时间: 2024-10-31 15:03:58

[学习记录]二叉树删除的相关文章

算法学习记录-查找——平衡二叉树(AVL)

排序二叉树对于我们寻找无序序列中的元素的效率有了大大的提高.查找的最差情况是树的高度.这里就有问题了,将无序数列转化为 二叉排序树的时候,树的结构是非常依赖无序序列的顺序,这样会出现极端的情况. [如图1]: 这样的一颗二叉排序树就是一颗比较极端的情况.我们在查找时候,效率依赖树的高度,所以不希望这样极端情况出现,而是希望元素比较均匀 的分布在根节点两端. 技术参考:fun4257.com/ 问题提出: 能不能有一种方法,使得我们的二叉排序树不依赖无序序列的顺序,也能使得我们得到的二叉排序树是比

Objc基础学习记录5

NSMutableString类继承的NSString类. NSMutableString是动态的字符串. 1.appendingString 方式: 向字符串尾部添加一个字符串. 2.appendingFormat:可以添加多个类型的字符串. int,chat float,double等 3.stringWithString 创建字符串, 4.rangeOfString 返回str1在另一个字符串中的位置. 5.NSMakeRange(0,3) 字符串0位到3位. 6.deleteCharac

Python学习记录day6

Python学习记录day6 学习 python Python学习记录day6 1.反射 2.常用模块 2.1 sys 2.2 os 2.3 hashlib 2.3 re 1.反射 反射:利用字符串的形式去对象(默认)中操作(寻找)成员 cat commons.py #!/usr/bin/env python#_*_coding:utf-8_*_''' * Created on 2016/12/3 21:54. * @author: Chinge_Yang.''' def login(): pr

libgdx学习记录19——图片动态打包PixmapPacker

libgdx中,opengl 1.x要求图片长宽必须为2的整次幂,一般有如下解决方法 1. 将opengl 1.x改为opengl 2.0.(libgdx 1.0版本后不支持1.x,当然不存在这个问题,这里针对的是0.9.9版本) 2. 使用TexturePacker将图片打包好然后作成一张大图添加进来. 第二种方法是常用方法,但是不太灵活,添加.删除某些图片不太方便,改动较大.这里可以考虑使用PixmapPacker将图片进行动态打包. 主要方法: pack(String name, Pixm

Python学习记录-2016-12-18

今日学习记录: 元组: 和list的区别是,元组只有两个操作,count和index,不能修改,添加,删除 购物车示例: #!/usr/bin/env python # -*- coding: utf-8 -*- # Author:Jack Niu product_list = [     ("Iphone", 5888),     ("Mac Pro", 11000),     ("Bike", 899),     ("Book&qu

【学习记录】关于makefile而进行的互联网学习技巧练习及学习笔记和学习心得记录(vs2010)

我也不知道作为一个完全的windows平台下的不怎么专业的软件工程学生,看到<Accelerated C++>的源代码,第一反应是:哦!我应该用make生成工程文件.然后我愉快的用AOL开始搜索相关资料. 然并卵!我一定是被什么奇怪的生物附身了.我应该直接用vs创建项目->导入文件.然后……ctrl+F5.多么完美. 可是……以下: [教程]来自于云风大大的blog(云风的 BLOG) IDE 不是程序员的唯一选择(一) 以及后面的(二)(三)(四) 以及大大写了一篇半,只为了说明用cl

Objc基础学习记录3

在学习Objective-c中, 数组 1.NSArray, 这是一个不可变的数组,不能修改和删除其中的对象,可以存储任意objective的对象指针. 不能存储int,char类型的,,需要转换为需要的类型. 要快速枚举数组中的值,用in. 1 for (NSString *eleement in myArray) 2 NSLog(@"myArray is %@",element); 2.NSMutableArray 这是一个可变的数组,可以向其中添加和删除对象. a.添加addOb

Java学习-012-文件删除实例及源代码

此文源码主要为应用 Java 创建文件的源代码.若有不足之处,敬请大神指正,不胜感激! 文件删除源代码如下: 1 /** 2 * @function 文件操作:删除文件.若文件存在且未被占用,则删除文件:若文件存在且被占用,则记录文件占用信息:若文件不存在,则对应记录日志信息 3 * 4 * @author Aaron.ffp 5 * @version V1.0.0: autoUISelenium main.java.aaron.java.tools FileUtils.java deleteF

Python学习记录-2016-12-22

今日学习记录: info = {     "stu1": "Tenglan wu",     "sut2": "luola longze",     "sut3": "maliya xiaoze" }#定义一个字典,字典是无序的 print(info)#打印这个字典 print(info["stu1"])#通过 key 打印这个字典里的值 info["stu