(C language) Front-middle-back order traversal of binary tree

There are three main types of binary tree traversal:

(1) First (root) order traversal (root left and right)

(2) Middle (root) order traversal (left root right)

(3) Post (root) order traversal (left and right roots)

Implementing it in code is recursive traversal.

#include<stdio.h>
#include<stdlib.h>
#define maxSize 5

typedef char Elemtype;

typedef struct Tree{
    
    
	Elemtype c;
	struct Tree *left;
	struct Tree *right;
}Tree,*BiTree;

typedef struct tag_t{
    
    
	BiTree t;
	struct tag_t *next;
}*qtag_t,tag_t;

void preOrder(BiTree p){
    
    
	if(NULL!=p){
    
    
		printf("%c",p->c);
		preOrder(p->left);
		preOrder(p->right);
	}
}

void inOrder(BiTree p){
    
    
	if(NULL!=p){
    
    
		inOrder(p->left);
		printf("%c",p->c);
		inOrder(p->right);
	}
}

void postOrder(BiTree p){
    
    
	if(NULL!=p){
    
    
		postOrder(p->left);
		postOrder(p->right);
		printf("%c",p->c);
	}
}

int main(){
    
     	
	BiTree tree = NULL,tnew;
	char c;
	qtag_t qcur = NULL,qtail = NULL,qhead = NULL,qnew = NULL;
	while(scanf("%c",&c)){
    
    
		if('\n'==c){
    
    
			break;
		}
		tnew = (BiTree)calloc(1,sizeof(Tree));
		tnew->c = c;
		qnew = (qtag_t)calloc(1,sizeof(tag_t));
		qnew->t = tnew;
		if(NULL==tree){
    
    
			qhead = qnew;
			qtail = qnew;
			qcur = qnew;
			tree = tnew;
		}else{
    
    
			qtail->next = qnew;
			qtail = qnew;
			if(NULL==qcur->t->left){
    
    
				qcur->t->left = tnew;
			}else if(NULL==qcur->t->right){
    
    
				qcur->t->right = tnew;
				qcur = qcur->next;
			}
		}
	}
	printf("前序遍历的结果为:");
	preOrder(tree);
	printf("\n");
	printf("中序遍历的结果为:");
	inOrder(tree);
	printf("\n");
	printf("后序遍历的结果为:");
	postOrder(tree);
	printf("\n");
	return 0;
}

insert image description here

Guess you like

Origin blog.csdn.net/L6666688888/article/details/128704744