1.二叉树的存储结构:
(1)二叉树的顺序存储表示:
#define MAX_TREE_SIZE 100 //二叉树的最大结点数
typedef TElemType SqBiTree[MAX_TREE_SIZE];
SqBiTree bt;
(2)二叉树的链式存储表示:
①二叉链表:
typedef struct BiTNode //结点结构
{
TElemType data;
struct BiTNode *lchild, *rchild; //左右孩子指针
} BiTNode, *BiTree;
②三叉链表:如要找某个结点的父结点,在三叉链表中很容易实现,在二叉链表中则需从根指针出发一一查找。
typedef struct TriTNode //结点结构
{
TElemType data;
struct TriTNode *lchild, *rchild; //左右孩子指针
struct TriTNode *parent; //双亲指针
} TriTNode, *TriTree;
③线索链表:
2.若一个二叉树中含有n个结点,则它的二叉链表中必含有2n个指针域,其中必有n + 1个空的链域。
证明:分支数目B = n - 1,即非空的链域有n - 1个,空链域有2n - (n - 1) = n + 1个。
3.二叉树的遍历:顺着某一条搜索路径巡防二叉树中的结点,使得每个结点均被访问一次,而且仅被访问一次。对于二叉树可以有三条搜索路径:先上后下的按层次遍历;先左(子树)后右(子树)的遍历;先右子树后左子树的遍历。
(1)先左后右的遍历算法:递归操作
①先根遍历:若二叉树为空树,则空操作;否则,访问根结点->先序遍历左子树->先序遍历右子树。
先根遍历的递归算法描述:
void Preorder(BiTree T)
{
if (T)
{
visit(T->data); //访问根结点
Preorder(T->lchild); //遍历左子树
Preorder(T->rchild); //遍历右子树
}
}
②中根遍历:若二叉树为空树,则空操作;否则,中序遍历左子树->访问根结点->中序遍历右子树。
③后根遍历:若二叉树为空树,则空操作;否则,后序遍历左子树->后序遍历右子树->访问根结点。
4.
5.
6.
7.
8.
9.
10.
原文地址:https://www.cnblogs.com/hou36/p/9903521.html