zl程序教程

您现在的位置是:首页 >  后端

当前栏目

二叉树理论基础

2023-09-14 09:14:58 时间

满二叉树:如果一棵二叉树只有度为0的结点和度为2的结点,并且度为0的结点在同一层上,则这棵二叉树为满二叉树。深度为k,有2^k-1个节点的二叉树。

优先级队列其实是一个堆,堆就是一棵完全二叉树,同时保证父子节点的顺序关系。

二叉搜索树
前面介绍的树,都没有数值的,而二叉搜索树是有数值的了,二叉搜索树是一个有序树。
● 若它的左子树不空,则左子树上所有结点的值均小于它的根结点的值;
● 若它的右子树不空,则右子树上所有结点的值均大于它的根结点的值;
● 它的左、右子树也分别为二叉排序树

平衡二叉搜索树
平衡二叉搜索树:又被称为AVL(Adelson-Velsky and Landis)树,且具有以下性质:它是一棵空树或它的左右两个子树的高度差的绝对值不超过1,并且左右两个子树都是一棵平衡二叉树。

二叉树可以链式存储,也可以顺序存储。

如果父节点的数组下标是 i,那么它的左孩子就是 i * 2 + 1,右孩子就是 i * 2 + 2。
但是用链式表示的二叉树,更有利于我们理解,所以一般我们都是用链式存储二叉树。
所以大家要了解,用数组依然可以表示二叉树。
二叉树主要有两种遍历方式:

  1. 深度优先遍历:先往深走,遇到叶子节点再往回走。
  2. 广度优先遍历:一层一层的去遍历。
    ● 深度优先遍历
    ○ 前序遍历(递归法,迭代法)
    ○ 中序遍历(递归法,迭代法)
    ○ 后序遍历(递归法,迭代法)
    ● 广度优先遍历
    ○ 层次遍历(迭代法)

    ● 栈其实就是递归的一种是实现结构,也就说前中后序遍历的逻辑其实都是可以借助栈使用非递归的方式来实现的
    ● 而广度优先遍历的实现一般使用队列来实现,这也是队列先进先出的特点所决定的,因为需要先进先出的结构,才能一层一层的来遍历二叉树。