二叉树和排序

1.翻转二叉树
    1.1非递归方式:从根节点开始遍历,获取根节点的左右子节点,进行交换,如果左右子节点还有子节点,继续交换。
       1.1.1创建一个队列
         开启循环:队列不为空
         队列头部元素出队
         将其左右子节点入队
         翻转左右子节点

    2.1递归方式
        2.1.1 判断root是否为空
                将root的左右子树分别进行翻转
                交换左右子树
                返回root

2.先序遍历二叉树
    1.创建一个集合,用来存储遍历的结果
    2.判断node是否为空
    3.将node的值添加到集合中
    4.对node的左子树和右子树都进行先序遍历
        

3.层序遍历二叉树
    1.创建一个队列,将root入队
    2.创建一个集合,存储每一层便利的结果
    3.开始循环
        3.1记录队列长度
        3.2开启for循环,进行出队和入队
        3.3将头部元素出队
        3.4将node值添加到集合中

4.二叉树的最大深度
    1.判断root是否为空
    2.取左右子树中深度的最大值,加1

5.二叉树的最小深度:从根节点到叶子节点的最小层级

6.获取二叉树每一层的最大值
    1.创建一个队列,将root入队
    2.创建集合,存储最大值
    3.开启循环
        3.1获取队列长度
        3.2定义一个变量作为这一层的最大值(Integer.MIN_VALUE)
        3.3将头部元素出队
        3.4将其左右子节点入队,比较值大小
        3.5返回最大值
7.二叉树的右视图
    只有右子树的视图

8.冒泡排序
    每轮冒泡(选出)一个最大值
    1.先写一轮的冒泡
    2.再写循环冒泡
    
    冒泡优化:设置Boolean类型,默认需要冒泡,当不需要冒泡时,执行break。

9.选择排序
    遍历时,标记一个最大值,遍历完所有值之后,将最大值与标记的值进行位置交换。

10.插入排序
    将数组的第二个位置设为待插入元素,将待插入元素的前一个元素设为 preIndex,向前比较
    当待插入元素小于preIndex时,待插入元素放在preIndex前面
    当待插入元素大于preIndex时,待插入元素放在preIndex后面

你可能感兴趣的:(排序算法,数据结构,算法)