一,树的定义
专业定义:
有且只有一个成为根的结点
有若干个互不相交的子树;这些树本身也是一棵树。
通俗定义:
树是有结点和边构成
每个结点只有一个父结点,但可以有多个子结点
根结点无父结点
二,一些专业术语
结点的度:结点拥有的子树数称为结点的度。
叶子结点(终结结点):度为0的结点称为叶子结点或终结结点。
非叶子结点(非终结结点):度不为0的结点。
树的度:树上结点的度的最大值。
双亲、孩子:结点子树的根结点叫做该结点的孩子结点,其为孩子结点的双亲。
兄弟:同一双亲的孩子之间互为兄弟。
祖先:从根到该节点所经分支上的所有结点,都称为该结点的祖先。
子孙:任意树上的结点都为数的根结点的子孙。
层次:树的根为第一层,根的孩子在第二层,依次类推。
堂兄弟:双亲在同一层的节点互为堂兄弟。
深度或高度:树中结点的最大层次称为树的深度或高度。
有序树:树上各结点的子树从左到右若有次序,则成为有序树。否则为无序树。
树的分类:
一般树:任意结点的子结点数不受限制。
二叉树:任意结点的子结点数不超过两个且子结点的位置不可更改。又可分为:
- 一般二叉树
- 满二叉树
- 完全二叉树:只删除满二叉树最底层最右边的连续若干个结点。
森林: N个互不相交的树。
三,二叉树的算法实现
头文件
#include<stdio.h>
#include<stdlib.h>
结点结构体构造类型
tyedef struct node
{
struct node *left;
struct node *right;
int data;
}Node;
根节点结构体构造类型
typedef struct tree
{
Node *root;
char flag;
}Tree;
初始化根结点
Tree *Init_tree(Tree *ptr)
{
ptr->root=NULL;
ptr->flag='#';
}
创建新节点
Node *Create_tree(Node *pnode)
{
char temp;
printf("input node:\n");
scanf("%c",&temp);
if('#'==temp)
return NULL;
else
{
pnode=(Node *)malloc(sizeof(Node));
pnode->data=temp;
pnode->left=Create_tree(pnode->left);
pnode->right=Create_tree(pnode->right);
}
}
打印结点的值
void Print_tree(Node *ptr)
{
if(NULL==ptr)
printf(" ");
else
{
printf("%c",ptr->data);
Print_tree(ptr->left);
Print_tree(ptr->right);
}
}