二叉树遍历主要有三种,分为前序遍历,中序遍历,后序遍历。
先序遍历:
(1)先访问跟节点
(2)再先序访问左子树(递归)
(3)再先序访问右子树(递归)
中序遍历:
(1)中序遍历左子树
(2)再访问根节点
(3)再中序遍历右子树
后序遍历:
(1)后续遍历左子树
(2)再后续遍历右子树
(3)再访问根节点
#include<stdio.h>
#include<stdlib.h>
typedef struct BinaryTreeNode {
char num;
struct BinaryTreeNode* leftNode;
struct BinaryTreeNode* rightNode;
}BTNode,*PBTNode;
/*
*先序遍历
*/
void PreOrder(PBTNode pHead) {
if (NULL == pHead) {
return;
}
printf("%C ",pHead->num); //先根节点
PreOrder(pHead->leftNode); //再先序遍历左子树
PreOrder(pHead->rightNode); //再先序遍历右子树
}
/*
*中序遍历
*/
void InOrder(PBTNode pHead){
if (NULL == pHead) {
return;
}
InOrder(pHead->leftNode);
printf("%C ", pHead->num);
InOrder(pHead->rightNode);
}
/*
*后序遍历
*/
void PostOrder(PBTNode pHead) {
if (NULL == pHead) {
return;
}
PostOrder(pHead->leftNode);
PostOrder(pHead->rightNode);
printf("%C ", pHead->num);
}
PBTNode Init() { //生成上述的二叉树
PBTNode pA = (PBTNode)malloc(sizeof(BTNode));
pA->num = 'A';
PBTNode pB = (PBTNode)malloc(sizeof(BTNode));
pB->num = 'B';
PBTNode pC = (PBTNode)malloc(sizeof(BTNode));
pC->num = 'C';
PBTNode pD = (PBTNode)malloc(sizeof(BTNode));
pD->num = 'D';
PBTNode pE = (PBTNode)malloc(sizeof(BTNode));
pE->num = 'E';
PBTNode pF = (PBTNode)malloc(sizeof(BTNode));
pF->num = 'F';
pA->leftNode = pB;
pA->rightNode = pC;
pB->leftNode = pD;
pB->rightNode = NULL;
pC->leftNode = pE;
pC->rightNode = pF;
pD->leftNode = NULL;
pD->rightNode = NULL;
pE->leftNode = NULL;
pE->rightNode = NULL;
pF->leftNode = NULL;
pF->rightNode = NULL;
return pA;
}
int main() {
PBTNode pHead = Init();
puts("先序遍历");
PreOrder(pHead);
puts("\n中序遍历");
InOrder(pHead);
puts("\n后序遍历");
PostOrder(pHead);
return 0;
}