C语言基础 16 二叉树 算法

来源:互联网 发布:java web试题及答案 编辑:程序博客网 时间:2024/05/16 15:45
如果单向线性链式物理结构中每个节点有可能找到多个其他节点则它就变成树
树里的所有节点可以分成几层,不同层之间符合线性规律(任意两层之间有前后顺序)
树的最上面一层只有一个节点,这个节点叫做根节点
根节点可以代表整棵树
树里不同节点之间的直接关系叫做父子关系,其中靠近根节点的叫父节点,另外一个节点叫子节点
树里任何节点最多只能有一个父节点(根节点没有父节点)如果树里任何节点最多只能有两个子节点这种树叫二叉树
二叉树是最简单的树
我们用左右区分二叉树里某个节点的两个子节点,树里任何节点都可以当作根节点看待,它可以代表它下面所有节点构成的树
二叉树里任何节点都可以当作一个新的二叉树看待,一个节点的左子节点作为根节点构成树叫做这个节点的左子树
任何一棵树可以分成三部分看待:根节点,根节点的左子树,根节点的右子树
所有树都可以转换成二叉树

依次处理树中每个节点的操作叫树的遍历
树的绝大多数操作都是通过遍历实现的
树的遍历通常采用递归方式实现
遍历树的时候永远先遍历左子树然后遍历右子树
根据根节点处理时机的不同把遍历分成三种:
    最开始处理根节点的遍历叫前序遍历,

    最后处理根节点的遍历叫后序遍历,

    中间处理根节点的遍历叫中序遍历


算法是解决一些常见问题的固定方法,同一个问题可以用多个算法来解决,不同的算法适合用在不同的环境里

排序算法可以按照某种顺序把一组数字排列好
排序算法分很多次重新执行,每次把一个数字放在合适位置上
为了把一个数字放在合适的位置上既可以先确定数字然后找位置也可以先确定位置然后找数字
通过不断交换两个存储区的内容最终把合适的数字放在合适的位置上

1.冒泡排序算法
    采用先确定位置然后找数字的方法,这个位置既可以在最前面也可以在最后面,冒泡排序中永远对两个相邻存储区的内容做顺序调整

2.选择排序算法
    也采用先确定位置然后找数字的方法,这个位置既可以在最前面也可以在最后面,把选定位置里的数字和所有其他位置里的数字依次进行顺序调整,最终把合适数字放在选定位置里

3.插入排序
    采用先确定数字然后找位置的方法,每次把第一个或最后一个没有排好序的数字作为选定数字,把它插入到已经排好序的数字中合适的位置里,每次把选定数字和一个相邻存储区的内容做顺序调整,直到它被放在合适的位置上

4.快速排序算法
     采用先确定数字然后找位置的方法,从没有处理过的所有数字两端选择一个作为基准数字把基准数字和所有其他数字进行顺序调整,比基准数字大的放一边,比基准数字小的放另一边,每次对没有处理过的数字中两端的数字进行顺序调整(它们中一定包含基准数字)在调整完两个数字的顺序后把不是基准数字的数字排除在外

查找算法可以从一组数字里找到某一个数字所在的位置

1.顺序查找
    依次把每个数字和要查找的数字做对比,直到找到为止
    如果数字的排列没有规律就只能采用这种方法查找

2.折半查找算法
    如果所有数字已经按照某种顺序排列好就可以用中间位置的数字和目标数字做对比,这样可以一次排除掉一半的数字
    重复以上过程就可以很快找到目标数字的位置


原创粉丝点击