zoukankan      html  css  js  c++  java
  • 二分查找树

    定义

    1 所谓的一棵二分查找树(Binary search tree) T,要么是一棵空树,要么是以 r = (key, value) 为根节点的二叉树,而且其左、右子树都是二分查找树,同时  n 在 r 的左子树中,所有节点(如果存在的话)的关键码均不大于 key;  o 在 r 的右子树中,所有节点(如果存在的话)的关键码均不小于 key。 

    二叉树 T 为二分查找树,当且仅当其中序遍历序列是单调非降的。 

    查找算法

    二分查找树查找算法的构思是:从根节点始,以递归的形式不断缩小查找范围,直到发现目 标条目(查找成功)或查找范围缩小至空树(查找失败)。 

    在递归的每一层,一旦发现当前节点为 null,则说明查找范围已经为空,查找失败;否则,我 们将目标关键码与当前节点的关键码做对比。与有序查找表的二分查找过程类似,这里的比较结果 也不外乎三种可能:

    1. 目标关键码更大(比如在节点 36 处)。此时,可以深入右子树中做递归查找;

    2. 目标关键码更小(比如在节点 93 和 58 处)。此时,可以深入左子树中做递归查找;

    3. 相等(比如在节点 46 处)。此时算法以“查找成功”结束。 

    ,一般的二分查找树对其高度没有任何限制,在坏情况下,由n个节点构成的二分查找 树的高度可以达到Θ(n)。如 图七.5 所示,当所有节点都没有左孩子时,就是这样的一种极端情况。 此时,查找操作在坏情况下可能需要线性的时间⎯⎯这并不奇怪,因为实际上,这样的一棵“二 分”查找树已经退化为了一个不折不扣的有序查找表。

    查找算法

    插入算法

    删除算法

    对于节点有两个孩子?我们删除的时候只要记住一点,二叉树有个中序排列的树,我们删除的节点要找下一个min(大于这个节点值的节点)。

    https://blog.csdn.net/isea533/article/details/80345507这篇blog的图还是不错的,我们要掌握一种思维,所以并不需要看原博主写的代码。我已经列出伪代码了。

    一个没有高级趣味的人。 email:hushui502@gmail.com
  • 相关阅读:
    iOS 列表三级展开
    iOS 聊天界面
    iOS 地图(添加大头针)
    iOS 地图
    swift 快速创建一些基本控件
    swift
    swift
    swift4.2 打印所有系统字体
    Xcode 去掉控制台无用打印信息
    swift
  • 原文地址:https://www.cnblogs.com/CherryTab/p/12056755.html
Copyright © 2011-2022 走看看