数据结构(C)树(1)
1.概念与性质
树是一种非线性结构,与前面的链表栈与队列(线性结构)不同。树(Tree)是由n(n>=0)个节点构成的有限集合。
当n=0,就为空树。
当n>0,必有一个树根(root),除了树根,其余的节点可以划分为很多个子集,也叫子树。
树的边说有方向性的,只能从树根指向某一节点,“只能从上到下”,有且只有一条路径,反之亦然。
术语:节点的度是指一个节点其子树的个数。
树的度树中所有节点中最大的度数。
子节点对某一节点而言,其子树的跟节点。父节点反过来。
节点的层次:根节点为第一层,依次往下数。树的深度也就说最大层次。
2.二叉树
任意节点的最大度为2。若二叉树不为空,则必然有一个根节点,以及有两个分别为左子树和右自树的子树。这两个子树当然也是二叉树。
二叉树的链式存储Code
struct TreeNode{
ElementType Data;/*数据域*/
struct TreeNode*Left;/*左子树*/
struct TreeNode*Right;/*右子树*/
}
struct TreeNode*T;
T=NULL;/*创建很简单*/
3.二叉树的操作
二叉树的节点Count
思路:若二叉树位空,则返回0;
若不为空,泽必有一个root和两个子树。所以二叉树的节点数Count为1+左子树的节点数+右子树的节点数。
Code
int Count(struct TreeNode){
if(T==NULL)
return 0;
return 1+Count(T->Left)+Count(T->Right);
}/*这里用到了递归的思想,因为为二叉树,根据二叉树的特点,用函数递归调用*/
下一节会讲到求叶节点(度数为0的节点,“树叶”)的数量,树高,以及如何遍历二叉树来确定树的形状。