先序、中序、后续遍历概述
三种遍历的代码
// demo树的遍历.cpp : 此文件包含 "main" 函数。程序执行将在此处开始并结束。
//
#include "pch.h"
#include <iostream>
#include <stdlib.h>
#include <string.h>
using namespace std;
struct tNode
{
int data;
struct tNode *lChild, *rChild;
};
typedef struct tNode tNode;
typedef struct tNode* Tree;
//先序遍历
void preOrder(tNode* root)//树的根节点
{
if (root == NULL) return;
printf("%d ", root->data);
preOrder(root->lChild);
preOrder(root->rChild);
}
//中序遍历
void inOrder(tNode* root)
{
if (root == NULL) return;
inOrder(root->lChild);
printf("%d ", root->data);
inOrder((root->rChild);
}
void postOrder(tNode* root)
{
if (root == NULL) return;
postOrder(root->lChild);
postOrder(root->rChild);
printf("%d ", root->data);
}
void main()
{
tNode p1, p2, p3, p4, p5, p6;
memset(&p1, 0, sizeof(tNode));
memset(&p2, 0, sizeof(tNode));
memset(&p3, 0, sizeof(tNode));
memset(&p4, 0, sizeof(tNode));
memset(&p5, 0, sizeof(tNode));
memset(&p6, 0, sizeof(tNode));
p1.data = 1;
p2.data = 2;
p3.data = 3;
p4.data = 4;
p5.data = 5;
p6.data = 6;
p1.lChild = &p2;
p1.rChild = &p3;
p2.lChild = &p4;
p3.lChild = &p5;
p3.rChild = &p6;
printf("先序遍历:");
preOrder(&p1);
printf("\n");
printf("中序遍历:");
inOrder(&p1);
printf("\n");
printf("后序遍历:");
postOrder(&p1);
printf("\n");
system("pause");
return;
}
建树和运行结果如下: