数据结构——树(1):树的基本概念,二叉树、完全二叉树、满二叉树、搜索二叉树

树这个数据结构用到了递归的概念:树的子树还是树;
度degree:节点的子树个数;
树的度:树中任意节点的度的最大值;
兄弟sibling:两节点的parent相同;
层layer:根在第一层,以此类推;
高度height:叶子节点的高度为1,根节点高度最高;
有序树:树中各个节点是有次序的;
森林forest:多个树组成;

树的表示方法:

1,亲表示法
2,子表示法
3,亲子表示法
4,亲子兄弟表示法

树的类型:

1,线性表是树的一种特例
2,斜树
3,二叉树——完全二叉树——满二叉树

树的存储方式:

1,顺序存储:只适用于完全二叉树——完全二叉树和数组可以一一对应互转
2,链表存储:通用的存储方式

二叉树

度不超过2的树(度全是1就是线性表):

二叉树性质

1.第i层至多有2^(i-1)个节点;
2.深度为k的二叉树最多有2^k -1个节点;
3.任意二叉树,度为0的节点数等于度为2的节点数+1;

二叉树的遍历

(1)前序遍历:先双亲、再左孩子、最后右孩子;
(2)中序遍历:先左孩子、再双亲、最后右孩子;
(3)后序遍历:先左孩子、再右孩子、最后双亲;
(4)层次遍历:一层一层,从左到右、从上到下遍历;

二叉树前序,中序,后序互求:http://blog.csdn.net/picway/article/details/72229650

扩展二叉树

对于一般二叉树的扩充,为了能够通过一个遍历序列建立二叉树,扩展二叉树如图所示:
《数据结构——树(1):树的基本概念,二叉树、完全二叉树、满二叉树、搜索二叉树》
如果存在遍历序列:AB##C##,则可以很容易的建立二叉树;
此种方式很方便,因为一般来说都需要三种遍历方式中的两种才可以确定一个二叉树;

树、森林、二叉树的转换

树转二叉树:

《数据结构——树(1):树的基本概念,二叉树、完全二叉树、满二叉树、搜索二叉树》

森林转二叉树:

《数据结构——树(1):树的基本概念,二叉树、完全二叉树、满二叉树、搜索二叉树》

二叉树转树:

《数据结构——树(1):树的基本概念,二叉树、完全二叉树、满二叉树、搜索二叉树》

二叉树转森林:

《数据结构——树(1):树的基本概念,二叉树、完全二叉树、满二叉树、搜索二叉树》

特殊二叉树

完全二叉树

完全二叉树的特点:
(1)叶子结点只能出现在最下两层。
(2)最下层的叶子一定集中在左部连续位置
(3)倒数二层,若有叶子结点,一定都在右部连续位置。
(4)如果结点度为1,则该结点只有左孩子,即不存在只有右子树的情况。
(5)同样结点数的二叉树,完全二叉树的深度最小。

(即元素是由上到下由左到右顺次排列到二叉树中的,如果元素个数是2^n-1个,则排成满二叉树)

满二叉树

满二叉树的特点有:
(1)叶子只能出现在最下一层。
(2)非叶子结点的度一定是2。
(3)在同样深度的二叉树中,满二叉树的结点个数最多,叶子树最多。

注意:满二叉树一定是棵完全二叉树,但完全二叉树不一定是满的。

二叉搜索树

二叉查找树定义:具有下列性质的二叉树称为二叉搜索树:
  1) 若左子树不空,则左子树上所有结点的值均小于它的根结点的值;
  2) 若右子树不空,则右子树上所有结点的值均大于或等于它的根结点的值;
  3) 左、右子树也分别为二叉排序树;
  4) 没有键值相等的节点。

空树也是一个二叉搜索树。

对于一个二叉搜索树,最小值在最左的叶节点上,最大值在最右的叶节点上。

二叉查找树的插入过程如下:

  1) 若当前的二叉查找树为空,则插入的元素为根节点;

  2) 若插入的元素值小于根节点值,则将元素插入到左子树中;

  3) 若插入的元素值不小于根节点值,则将元素插入到右子树中。

二叉查找树的删除,分三种情况进行处理:

  1) p为叶子节点,直接删除该节点,再修改其父节点的指针。
  2) p为单支节点(即只有左子树或右子树)。让p的子树与p的父亲节点相连,删除p即可(注意分是根节点和不是根节点);

  3) p的左子树和右子树均不空。找到左子树的最大值,或右子树的最小值,移到p的位置。

  二叉查找树的性质:对二叉查找树进行中序遍历,即可得到有序的数列。
  
  二叉查找树的时间复杂度:它和二分查找一样,插入和查找的时间复杂度均为O(logn),但是在最坏的情况下仍然会有O(n)的时间复杂度。原因在于插入和删除元素的时候,树没有保持平衡。我们追求的是在最坏的情况下仍然有较好的时间复杂度,这就是平衡查找树设计的初衷。
  二叉查找树的高度决定了二叉查找树的查找效率。
  

参考资料:
http://www.cnblogs.com/maybe2030/p/4732377.html
http://blog.csdn.net/xiazdong/article/details/7296257
http://blog.csdn.net/jnu_simba/article/details/8853822
http://dongxicheng.org/structure/trietree/
https://www.zhihu.com/question/20176446

    原文作者:满二叉树
    原文地址: https://blog.csdn.net/picway/article/details/57084329
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞