王道数据结构——树与二叉树
本文主要讲述了数据结构中树的基本概念,二叉树,树与森林以及树与二叉树的应用。 知识框架如下图所示: 树的基本概念 树是N(N>=0)个结点的有限集合,N=0时,称为空树。 而任何一棵非空树应该满足,有且仅有一个根结点,当N>1时,其余结点又可以分为几个互不相交的有限集合,其本身又构成一个树(体现递归的定义),称为根结点的子树。需要特别说明的一个重要结论是,任何一个有N(N>=1)个结点的树都有N-1条边。 二叉树的基本概念 二叉树是一种特殊的树形结构,其特点是不存在度大于2的结点,且每个结点的子树(若有)均存在左右之分,其次序不能颠倒。 严格一点来说,二叉树是n(n>=0)个结点的有限集合。 1,n=0时,表示空二叉树。 2,n>0时,由根结点和互不相交的被称为根的左子树和右子树组成,而左子树和右子树也分别是一颗二叉树。 几种特殊的二叉树:满二叉树,完全二叉树,排序二叉树,平衡二叉树。 二叉树的存储结构 顺序存储结构,将一棵二叉树用0填充成一棵满二叉树,对于每个结点i,双亲结点为floor(i/2),左孩子为2*i,右孩子为2*i+1。 1 //二叉树的顺序存储结构 2 #define MAX_TREE_SIZE 100 3 typedef int SqBiTree[MAX_TREE_SIZE]; 4 SqBiTree bt; 5 6 //二叉树的链式存储结构 7 typedef