-----下面是二叉树的定义-----储存---

说了那么多,下面该上正货了。

二叉树的定义:一个有穷的节点的集合

        这个集合可以为空

      若不为空,则它是有根节点和称为其左子树Tl和右子树的两个不相交的二叉树组成。

特殊的二叉树这个就不是完全二叉树

二叉树对应的操作集。

BT∈BinTree,Item∈ElementType,重要的操作有。

void PerOredTraversal(BinTree  BT):先序---根,左子树,右子树;

void InrOredTraversal(BinTree  BT) :中序---左子树,根,右子树;

void PostOredTraversal(BinTree  BT):后续---左子树,右子树,根;

void LevelOredTraversal(BinTree  BT):层次遍历,从上到下,从左到右。

二叉树的储存

1:顺序储存(设计竞赛的话,不怕浪费那一点容量尽量使用简单移动的例如顺序储存,当不能用顺序储存的时候再开始,去仔细的研究链表。)    这个是  完全二叉树。。。

 

普通的二叉树储存也可以这样储存

他们父子关系的寻找为   n/2  是  n的父亲    n/2  和n/2+1分别是  n的左右儿子。

虽然以  空间为代价,但是在程序设计竞赛的时候,空间应该是没问题的。多关心时间复杂度就可以了。

1 /*下面是 二叉树的   链表储存方式,,一带而过    深究的话性价比不大*/
2 typedef struct Treenode *BinTree;
3 typedef Bintree position;
4 struct Treenode
5 {
6     Element Date;
7     BinTree left;
8     BinTree Right;
9 };

原文地址:https://www.cnblogs.com/A-FM/p/5141664.html