提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
前言
关于二叉树的遍历的代码实现
一、二叉树的三种遍历实现
代码如下(示例):
typedef char date_t;
typedef struct node_t
{
date_t date;
struct node_t *left;
struct node_t *right;
}bitree;
bitree *tree_create();
void preorder(bitree*r);
void inorder(bitree *r);
void postorder(bitree *r);
#include<stdio.h>
#include<stdlib.h>
#include"tree.h"
bitree *tree_create(){
date_t ch;
bitree *r;
scanf("%c",&ch);
if(ch=='#')
return NULL;
if((r=(bitree*)malloc(sizeof(bitree)))==NULL)
{
printf("malloc is failed\n");
return NULL;
}
r->date=ch;//先根节点
r->left=tree_create();
r->right=tree_create();
return r;//函数递归使用
}
//先序//
void preorder(bitree *r){
if(r==NULL)
{
return;
}
else
{
printf("%c",r->date);
preorder(r->left);
preorder(r->right);
}
}
//中序//
void inorder(bitree *r){
if(r==NULL)
{
return;
}
else
{
inorder(r->left);
printf("%c",r->date);
inorder(r->right);
}
}
//后序//
void postorder(bitree *r){
if(r==NULL)
{
return;
}
else
{
postorder(r->left);
postorder(r->right);
printf("%c",r->date);
}
}
#include <stdio.h>
#include"tree.h"
int main(int argc, char *argv[])
{
bitree *r;
if((r=tree_create())==NULL)
return -1;
preorder(r);
puts("");//加入换行符
inorder(r);
puts("");
postorder(r);
puts("");
return 0;
}
二、二叉树的层次遍历实现
按照层次对二叉树进行遍历:
访问:ABECFDGHK
访问节点入队
出队 1.访问左子树,入队。 2.访问右子树,入队。(循环处理)
队列中存的是树形结构节点。
void layerorder(bitree *r){
linkqueue *lq;
if((lq=queue_create())==NULL)
{
return;
}
if(r==NULL)
return;
printf("%c",r->date);
enqueue(lq,r);
while(!queue_empty(lq)){
r=dequeue(lq);
if(r->left!=NULL){
printf("%c",r->left->date);
enqueue(lq,r->left);
}
if(r->right){
printf("%c",r->right->date);
enqueue(lq,r->right);
}
}
}
三、总结
本文主要阐述了四种不同的二叉树遍历方法,通过代码具体实现。