二叉树示意图 | |
二叉树定义 | typedef struct node { int data; node* lchild; node* rchild; }node,*tree; |
创建二叉树 声明: 主要行为 行为代码 补充行为 | status creattree(tree* pt) 输入数字 创建一个node node的data赋值 创建左右子树,每个树也指向一个节点,递归 int ch; scanf("%d",&ch);
*pt=(tree)malloc(sizeof(node));
(*pt)->data=ch;
creattree(&((*pt)->lchild)); creattree(&((*pt)->rchild)); 输入# 代表空节点 分配空间失败,报错 |
遍历(前序遍历为例子) 声明 主要行为 行为代码 补充行为 行为代码 | status pre_order_traverse(tree t) 打印data 左子树遍历 右子树遍历 printf("%d",t->data); pre_order_traverse(t->lchild); pre_order_traverse(t->rchild); 头指针为空(空树),结束 if(t==NULL) return ERROR; |
代码汇总:
#include<stdio.h>
#include<stdlib.h>
#include<ctype.h>
#include <string.h>
//-----------------------------
#define OK 1
#define ERROR 0
#define TRUE 1
#define FALSE 0
typedef int status;
#define MAXSIZE 20
//-----------------------------
typedef struct node
{
int data;
node* lchild;
node* rchild;
}node,*tree;
status creattree(tree* pt)
{
int ch;
scanf("%d",&ch);
*pt=(tree)malloc(sizeof(node));
(*pt)->data=ch;
creattree(&((*pt)->lchild));
creattree(&((*pt)->rchild));
}
status pre_order_traverse(tree t)
{
if(t==NULL)
return ERROR;
printf("%d",t->data);
pre_order_traverse(t->lchild);
pre_order_traverse(t->rchild);
}
status in_order_traverse(tree t)
{
if(t==NULL)
return ERROR;
in_order_traverse(t->lchild);
printf("%d",t->data);
in_order_traverse(t->rchild);
}
status post_order_traverse(tree t)
{
if(t==NULL)
return ERROR;
post_order_traverse(t->lchild);
post_order_traverse(t->rchild);
printf("%d",t->data);
}
void test()
{
}
int main()
{
test();
system("pause");
return 0;
}