知识点整理:
1、前序遍历:根-左-右
2、中序遍历:左-根-右
3、后序遍历:左-右-根
4、层序遍历:从树根出发一层一层从左往右遍历
代码展示:
#include#include #include typedef struct node{ char data; struct node *left,*right; }Node; Node *insert_node(Node *root,char c){ if(root==NULL){ Node *p=(Node *)malloc(sizeof(Node)); p->data=c; p->left=p->right=NULL; return p; } int x=rand()%2; if(x==0){//往左子树插入 root->left=insert_node(root->left,c); } else root->right=insert_node(root->right,c); return root; } void perorder(Node *root){//前序遍历 if(root==NULL)//当前结点为空 return ; printf("%c",root->data);//自身 perorder(root->left);//左子树 perorder(root->right);//右子树 } void inorder(Node *root){//中序遍历 if(root==NULL)//当前结点为空 return ; inorder(root->left);//左子树 printf("%c",root->data);//自身 inorder(root->right);//右子树 } void postorder(Node *root){//后序遍历 if(root==NULL)//当前结点为空 return ; postorder(root->left);//左子树 postorder(root->right);//右子树 printf("%c",root->data);//自身 } void levelorder(Node *root){//层序遍历 Node *num[30];//队列 int front=0,rear=1;//num[front]、num[rear]首、尾指针 num[0]=root; while(front!=rear){ Node *p=num[front]; front++; printf("%c",p->data); if(p->left!=NULL) num[rear++]=p->left; if(p->right!=NULL) num[rear++]=p->right; } printf("n"); } int main(){ srand(time(0)); int n,mark[26];//标记数组,避免产生重复字母 scanf("%d",&n);//二叉树的结点数 Node *root=NULL; for(int i=0;i 运行结果示例:
先序遍历: HBZUDA 中序遍历: BHDUZA 后序遍历: BDUAZH 层序遍历: HBZUAD该示例二叉树如下图所示:



