数据结构基础之二叉树的深度优先遍历、广度优先遍历

原文链接: https://me.csdn.net/bjweimengshu

 

 

什么是二叉树?

树的每个节点最多有2个孩子节点。

注意,最多有2个,也可能1个或0个。

  • 什么是满二叉树?

所有非叶子节点都存在左右孩子,并且所有叶子节点都在同一层级(这里的叶子节点不曾作为某一个子树的根,即该树的最后一层)。

满二叉树的每一个分支都是满的。

  • 什么是完全二叉树?

在最后一个叶子节点前的所有节点是满的。

 

树是非线性数据结构,二叉树可以用链表和数组来表达

链式存储结构:

     每一个节点包含三个部分:

  1. 存储数据的 data 变量;
  2. 指向左孩子的 left 指针;
  3. 指向右孩子的 right 指针

数组存储:

        按照层级顺序把二叉树的节点放到数组中对应的位置上。如果某一个节点的左孩子或者右孩子空缺,则数组的相应位置也空出来。

       假设一个父节点下标是 parent ,则它的左孩子下标是 2×parent+1,右孩子下标是 2×parent+2

 Note:对于一个稀疏的二叉树来说,使用数组表示法是非常浪费空间的。

 

二叉树的常用操作:查找,维持相对顺序

二叉查找树():该树的左子树小于父节点,右子树大于父节点,保证了二叉树的有序性。

二叉树自平衡的方式:红黑树、AVL树、树堆等

 

深度优先遍历:

1. 前序遍历:输出顺序是根节点、左子树、右子树

2. 中序遍历:输出顺序是左子树、根节点、右子树

3. 后序遍历:输出顺序是左子树、右子树、根节点

/**
*构建二叉树
*@param inputList 输入序列
*/
public static TreeNode createBinaryTree(LinkedListinputList){
    TreeNode node=null;
    if(inputList==null || inputList.isEmpty()){
    
    }
}

 

你可能感兴趣的:(数据结构)