遍历方法:无论哪种遍历方式,对每个节点的查看方式一般都遵循先左后右
二叉树的遍历方式
(D:DATA,L:LEFT,R:RIGHT)
- 先序遍历:DLR
- 中序遍历:LDR
- 后序遍历:LRD
对上图二叉树进行遍历
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<stdlib.h>
typedef struct BINARYNODE {
char ch;
struct BINARYNODE* lchild;
struct BINARYNODE* rchild;
}BinaryNode;
void Recursion(BinaryNode* root) {
if (root == NULL) {
return;
}
printf("%c ", root->ch);
Recursion(root->lchild);
Recursion(root->rchild);
}
void Recursion2(BinaryNode* root) {
if (root == NULL) {
return;
}
Recursion2(root->lchild);
printf("%c ", root->ch);
Recursion2(root->rchild);
}
void Recursion3(BinaryNode* root) {
if (root == NULL) {
return;
}
Recursion3(root->lchild);
Recursion3(root->rchild);
printf("%c ", root->ch);
}
void CreateBinaryTree() {
BinaryNode node1 = { 'A',NULL,NULL };
BinaryNode node2 = { 'B',NULL,NULL };
BinaryNode node3 = { 'C',NULL,NULL };
BinaryNode node4 = { 'D',NULL,NULL };
BinaryNode node5 = { 'E',NULL,NULL };
BinaryNode node6 = { 'F',NULL,NULL };
BinaryNode node7 = { 'G',NULL,NULL };
BinaryNode node8 = { 'H',NULL,NULL };
node1.lchild = &node2;
node1.rchild = &node6;
node2.rchild = &node3;
node3.lchild = &node4;
node3.rchild = &node5;
node6.rchild = &node7;
node7.lchild = &node8;
printf("先序遍历:");
Recursion(&node1);
printf("\n");
printf("中序遍历:");
Recursion2(&node1);
printf("\n");
printf("后序遍历:");
Recursion3(&node1);
}
int main() {
CreateBinaryTree();
return 0;
}
运行结果:
先序遍历:A B C D E F G H
中序遍历:B D C E A F H G
后序遍历:D E C B H G F A