-----下面是二叉树的定义-----储存---
说了那么多,下面该上正货了。
二叉树的定义:一个有穷的节点的集合
这个集合可以为空
若不为空,则它是有根节点和称为其左子树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 };