数据结构与算法——二叉树的前中后序遍历、查找与删除

1. 常用存储方式分析

  1. 数组存储方式的分析:

    优点:通过下标方式访问元素,速度块,对于有序数组,还可以使用二分查找提高检索速度。

    缺点:如果要插入值(按一定顺序)会整体移动,效率低,扩容时底层要创建两个数值进行copy…

    访问容易,插入和删除困难;

  2. 链式存储方式的分析:

    优点:在一定程度上对数组存储方式有优化(比如:插入一个数值节点,只需要将插入节点,连接到链表中即可——前一个节点的next指向插入节点,插入节点next指向下个节点),删除效率也是很好的

    缺点:在进行检索时,效率很低,检索某个值需要从头节点开始遍历。

    访问困难,插入和删除容易;

  3. 存储方式的分析:

    提高数据写入,读取的效率,比如利用二叉排序树,既可以保证数据的检索速度,同时也可以保证数据的插入,删除,修改的速度。

2. 二叉树

二叉树的概念:

  1. 每个节点最多只能有两个子节点的一种形式,二叉树的子节点分为左节点和右节点。
  2. 如果该二叉树的所有叶子节点都在最后一层,且节点数=2^n-1 ,n为层数,则称为满二叉树。

数据结构与算法——二叉树的前中后序遍历、查找与删除_第1张图片

  1. 叶子节点只会出现在最后2层,且最后一层的叶子节点都靠左对齐,这种结构就是完全二叉树。若设二叉树的深度为k,除第 k 层外,其它各层 (1~k-1) 的结点数都达到最大个数,第k 层所有的结点都连续集中在最左边,这就是完全二叉树。总结点数量为 n,2^{h-1}\leq n < 2^{h}

数据结构与算法——二叉树的前中后序遍历、查找与删除_第2张图片

二叉树的遍历:

前序遍历:

口诀:根左右。前序遍历首先访问根结点然后遍历左子树,最后遍历右子树。在遍历左、右子树时,仍然先访问根节点,然后遍历左子树,最后遍历右子树。
若二叉树为空则结束返回,否则:
(1)访问根结点。
(2)前序遍历左子树

(3)前序遍历右子树 。
需要注意的是:遍历左右子树时仍然采用前序遍历方法。

举例:

数据结构与算法——二叉树的前中后序遍历、查找与删除_第3张图片

前序遍历结果:ABDECF
注意:已知后序遍历和中序遍历,就能确定前序遍历。

代码实现:

public void preOrder(){
   
    // 先输出当前节点
    System.out.println(this);
    //递归左子树
    if(this.left != null)
        this.left.preOrder();
    //递归右子树
    if(this.right !=null)
        this.right.preOrder();
}
//
Node{
   no=A, name='小红'}
Node{
   no=B, name='小明'}
Node{
   no=D, name='小张'}
Node{
   no=E, name='小呵'}
Node{
   no=C, name='小吕'}
Node{
   no=F, name<

你可能感兴趣的:(数据结构与算法,二叉树,算法,数据结构,java)