树是一种具有多个节点的数据结构,它的特点是根朝上,叶朝下。它的每个节点有零个或多个子节点;没有父节点的节点称为根节点;每一个非根节点有且只有一个父节点;除了根节点外,每个子节点可以分为多个不相交的子树。
二叉树也是树的一种,他的特点是每个根节点最多只能有两个子节点,也就是0,1,2种节点
二叉树的实现: 定义结构体:
typedef struct BSTNode
{
int data;
struct BSTNode *l,*r;
} *BSTree;
二叉树初始化:
void InitTree (BSTree &T)
{
T=(BSTree)malloc(sizeof(BSTree));
T->data=0;
T->l=T->r=NULL;
}//初始化
二叉树的插入:
void InsertTree(BSTree &T,int e)
{
if(!T)//递归结束
{
BSTree S;
S=(BSTree)malloc(sizeof(BSTree));
S->data=e;
S->l=S->r=NULL;
T=S;
}
else if(edata)
{
InsertTree(T->l,e);
}
else
{
InsertTree(T->r,e);
}
}//插入
二叉树的创建:
void TreeCreate(BSTree &T)
{
int n;
scanf("%d",&n);
T->data=n;
while(1)
{
scanf("%d",&n);
InsertTree(T,n);
if(getchar()=='n')
{
break;
}
}
}
二叉树的遍历:
- 前序遍历
- 中序遍历
- 后序遍历
前序遍历:
根节点->左子树->右子树
void print(BSTNode* T)
{
if(T == NULL){
return;
}
printf("%d ", T->data);
print(T->left);
print(T->right);
}
中序遍历:
左子树->根节点->右子树
void print(BSTnode* T)
{
if(T == NULL)
{
return;
}
printf("%d ", T->data);
inorder(T->left);
inorder(T->right);
}
后序遍历:
左子树->右子树->根节点
void print(BSTnode* T)
{
if(T == NULL)
{
return;
}
printf("%d ", T->data);
inorder(T->left);
inorder(T->right);
}
完整代码:
#include//前序遍历 #include #include typedef struct BSTNode { int data; struct BSTNode *l,*r; } *BSTree; void InitTree (BSTree &T) { T=(BSTree)malloc(sizeof(BSTree)); T->data=0; T->l=T->r=NULL; }//初始化 void InsertTree(BSTree &T,int e) { if(!T)//递归结束 { BSTree S; S=(BSTree)malloc(sizeof(BSTree)); S->data=e; S->l=S->r=NULL; T=S; } else if(e data) { InsertTree(T->l,e); } else { InsertTree(T->r,e); } }//插入 void TreeCreate(BSTree &T) { int n; scanf("%d",&n); T->data=n; while(1) { scanf("%d",&n); InsertTree(T,n); if(getchar()=='n') { break; } } } void print(BSTree T) { if(T) { printf("%d ",T->data); print(T->l); print(T->r); } } int main() { BSTree T; InitTree(T); printf("请输入数据:"); TreeCreate(T); printf("输出二叉树: "); print(T); return 0; }
输出结果:



