数据结构——第三讲、树(上)(2)

来源:互联网 发布:知乎洛基香港代购苹果 编辑:程序博客网 时间:2024/06/05 10:37

3.2 二叉树及存储结构

二叉树有左右先后顺序之分,最下面一层全部为叶节点,倒数第二层没有叶节点的树是完美二叉树(满二叉树),满二叉树最后一层从右往左少几个叶节点叫完全二叉树,完全二叉树的节点序号和满二叉树一样,除了少的那几个元素。

n0=n2 + 1;往上看一共有n0+n1+n2-1条边,往下看有n1+2*n2条边

二叉树的抽象数据类型:
类型名称:二叉树
对象数据集:又穷节点的集合。若不为空,由一个根节点和其左右二叉子树构成。
操作集:

Boolean IsEmpty(Position T);void Traversal(Position T);//按照某种特定的顺序遍历Position CreatTree();//创建一个二叉树

其中遍历操作包括:先序遍历、中序遍历、后序遍历、层序遍历。

void PreOrderTraversal(Position T);void InOrderTraversal(Position T);void PostOrderTraversal(Position T);void LevelOrderTraversal(Position T);

二叉树存储可以使用数组,但是数组只能存储完全二叉树,对于非完全二叉树必须补全成完全二叉树,然后按照从上到下,从左到右的顺序编号存储,第i个节点的父节点是i/2(去掉小数部分),左儿子是2*i,右儿子是2*i+1。

如果用链表,可以用统一的形式存储,比起非完全二叉树数组较为节省空间。

typedef struct TreeNode *BinTreestruct TreeNode{    ElementType Data;    BingTree Left;    BingTree Right;};