• 二叉树


    二叉树

    树也是基于结点的数据结构,但树里面的每个结点,可以含有多个链分别指向其他多个结点。

     

     

    谈论树的时候,我们会用到以下术语。
    •最上面的那一结点(此例中的“j”)被称为根。是的,图中的根位于树的顶端,请自行意会。
    •此例中,“j”是“m”和“b”的父结点,反过来,“m”和“b”是“j”的子结点。“m”又是“q”和“z”的父结点,“q”和“z”是“m”的子结点。
    •树可以分层。此例中的树有3层。

    基于树的数据结构有很多种,但本章只关注其中一种,二叉树。
    二叉树是一种遵守以下规则的树。
    •每个结点的子结点数量可为0、1、2。
    •如果有两个子结点,则其中一个子结点的值必须小于父结点,另一个子结点的值必须大于父结点。

    以下是一个二叉树的例子,其中结点的值是数字。

    注意,小于父结点的子结点用左箭头来表示,大于父结点的子结点则用右箭头来表示。

    查找

    二叉树的查找算法先从根结点开始。
    (1)检视该结点的值。
    (2)如果正是所要找的值,太好了!
    (3)如果要找的值小于当前结点的值,则在该结点的左子树查找。
    (4)如果要找的值大于当前结点的值,则在该结点的右子树查找。
    二叉树查找的时间复杂度是O(logN)

    插入

    有序数组查找需要O(logN),插入需要O(N),而二叉树都是只要O(logN)。当你估计应用会发生许多数据改动时,这一比较将有助你做出正确选择。

    删除

    删除操作遵循以下规则。
    •如果要删除的结点没有子结点,那直接删掉它就好。
    •如果要删除的结点有一个子结点,那删掉它之后,还要将子结点填到被删除结点的位置上。
    •如果要删除的结点有两个子结点,则将该结点替换成其后继结点。一个结点的后继结点,就是所有比被删除结点大的子结点中,最小的那个。
    •如果后继结点带有右子结点,则在后继结点填补被删除结点以后,用此右子结点替代后继结点的父节点的左子结点。
    O(logN)

    参考:数据结构与算法图解.12.1

  • 相关阅读:
    Python 面向对象 —— super 的使用(Python 2.x vs Python 3.x)
    安全移除驱动器、弹出、卸载的差别及详细查看设备的运行前后的异同
    java中不常见的keyword:strictfp,transient
    textarea文本域宽度和高度(width、height)自己主动适应变化处理
    Android 输入框弹出样式
    .net下载优酷1080P视频
    Oracle Hints具体解释
    关于成本核算方法、步骤、成本分析的简单回复
    程序猿接私活经验总结,来自csdn论坛语录
    Android getResources的作用和须要注意点
  • 原文地址:https://www.cnblogs.com/ooo0/p/12163011.html
Copyright © 2020-2023  润新知