排序二叉树

排序二叉树排序二叉树一、基本概念二叉树是一种从上往下的树状结构的数据结构,从根节点开始每个节点最多有两个子节点,左边的为左子节点,右边的为右子节点。排序二叉树–有顺序,且没有重复元素的二叉树。顺序为:

大家好,又见面了,我是你们的朋友全栈君。

排序二叉树

一、基本概念

二叉树是一种从上往下的树状结构的数据结构,从根节点开始每个节点最多有两个子节点,

左边的为左子节点,右边的为右子节点。

排序二叉树–有顺序且没有重复元素的二叉树。顺序为:

对每个节点而言:

1)如果左子树不为空,则左子树上的所有节点都小于该节点;

2)如果右子树不为空,则右子树上的所有节点都大于该节点;

<span role="heading" aria-level="2">排序二叉树

如图,根节点为5,左边的节点都大于5,右边的节点都小于5。

二、基本算法

1.查找

1)首先与根节点比较,相同则找到;

2)如果小于根节点,则到左子树种递归查找;

3)如果大于根节点,则到右子树中递归查找;

这个步骤与在数组中进行二分查找是类似的。此外,在排序二叉树中查找最大值和最小值很简单。

2.遍历

排序二叉树可以方便的按序遍历,用递归的方式。

如下图的例子,先访问根节点的左子树,一直到最左边的节点–1,1没有右子树

,返回上一层,访问3,然后访问3的右子树,4没有左子树,所以访问4,然后4的右

子树6,以此类推。1–3–4–6–7–8–9

<span role="heading" aria-level="2">排序二叉树

 

 不用递归的方式,也可以实现按序遍历:第一个节点为最左边的节点,从第一个

节点开始,依次找后继节点,找其后继节点的算法为:

1)如果该节点有右子节点,则后继节点为右子树中的最小节点;

2)如果该节点无右子节点,则后继节点为父节点或者某个祖先节点,

从当前节点往上找,如果它是父节点的右孩子,则继续找父节点,直到

它不是右孩子或父节点为空,第一个非右孩子节点的父节点就是后继节点,

如果找不到这样的祖先节点,则后继为空,遍历结束。

3.插入

在排序二叉树中,插入元素首先要找插入位置,即新节点的父节点。

与查找元素类似从根节点开始找:

1)与当前节点相同,则已经存在了,不能插入;

2)如果小于当前节点,则到左子树中查找,如果左子树为空,则当前节点为要找到的父节点;

3)如果大于当前节点则到右子树中查找,如果右子树为空,则当前节点为要找的父节点。

 3.删除

从排序二叉树中删除一个节点,主要有三种情况:

1)节点为叶子节点: 直接删除

2)节点只有一个孩子节点:

删除当前节点,让其子节点与父节点建立链接。

 <span role="heading" aria-level="2">排序二叉树

3)节点有两个孩子节点:

<span role="heading" aria-level="2">排序二叉树

 

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/154662.html原文链接:https://javaforall.net

(0)
上一篇 2022年7月1日 下午2:36
下一篇 2022年7月1日 下午2:36


相关推荐

  • DLL注入之使用SetWindowsHookEx注入「建议收藏」

    DLL注入之使用SetWindowsHookEx注入「建议收藏」原理分析:本次介绍的是使用全局钩子的方式进行注入。在Windows中可以使用SetWindowsHookEx来设置消息钩子,这个函数除了可以设置当前进程的钩子之外,它还可以设置全局钩子。全局钩子,顾名思义,即当前正在运行的进程都会被设置相应的钩子。//dwThreadId设置为0,则是全局钩子。HHOOKSetWindowsHookExA(intidHook,…

    2022年5月13日
    44
  • 杭电OJ2058_杭电OJ

    杭电OJ2058_杭电OJ杭电OJ2058我写的超时了下面是不超时的#include<stdio.h>#include<math.h>intmain(){ intn,m,i,j; while(scanf(“%d%d”,&n,&m)!=EOF){ if(n==0&&m==0) break; for(j=(int)sqrt((double)(2*m));j>=1;j–){ i=(

    2022年10月2日
    8
  • (一)Rxjava2+Retrofit完美封装

    (一)Rxjava2+Retrofit完美封装本篇文章已授权微信公众号 guolin blog 郭霖 独家发布要说 2016 年最火的 Android 技术是什么 毫无疑问肯定是 RxJava Retrofit Mvp 现如今 2017 年也已经过了快一半了 相信做 android 开发的小伙伴对 RxJava 和 Retrofit 也不再陌生 即使没有刻意的去学习过 也应该对 RxJava 和 Retrofit 有个一知半解 去年的时候学习了 Rxjava 和 Retr

    2025年11月20日
    5
  • 智谱“澳龙”AutoClaw 正式上线:支持本地电脑一键部署,预置 50+ 热门 Skills – 果核剥壳

    智谱“澳龙”AutoClaw 正式上线:支持本地电脑一键部署,预置 50+ 热门 Skills – 果核剥壳

    2026年3月12日
    2
  • 51单片机最小系统电路图_51单片机最小系统介绍

    51单片机最小系统电路图_51单片机最小系统介绍单片机最小系统包括单片机,电源电路,晶振电路和复位电路。电源电路:目前主流单片机的电源分为5V和3.3V这两个标准,STC89C51需要5V的供电系统。晶振电路:晶振为11.0592MHz(可以准确得到波特率9600和115200),为单片机系统提供基准时钟信号,电容(C2、C3)的作用是帮助无源晶振起振,并维持振荡信号的稳定。复位电路:为了防止程序跑飞,当芯片工作异常时,可以按下复位键重新启动。复位电路分为高电平复位和低电平复位,89C51是高电平复位。在单片机系统中,系统上电启动的时候复位一.

    2022年8月30日
    7
  • CAS Authentication failed!

    CAS Authentication failed!

    2021年9月3日
    76

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号