二叉树遍历
本篇针对链表类型的二叉树的遍历,数组类型的二叉树遍历就等于遍历数组
- 二叉树遍历笔记:二叉树遍历· 凛音Rinne/学习笔记 - 码云 - 开源中国 (gitee.com)
- 二叉树遍历工程文件:二叉树遍历 · 凛音Rinne/工程源码 - 码云 - 开源中国 (gitee.com)
文章目录
一、遍历规则
之前是以孩子兄弟的表示方法
这是是左右孩子的表示方法
typedef char BTDataType;
typedef struct BinaryTreeNode
{
struct BinaryTreeNode* left;
struct BinaryTreeNode* right;
BTDataType data;
}BTNode;
1. 前序遍历(Preorder Traversal)
- 亦称先序遍历,访问根结点的操作发生在遍历其左右子树之前
遍历顺序:根节点-左子节点-右子节点
// 二叉树前序遍历
void PreOrder(BTNode* root)
{
if (root == NULL) {
printf("NULL");
return;
}
printf("%c ", root->data);
PreOrder(root->left);
PreOrder(root->right);
}
2. 中序遍历(Inorder Traversal)
- 访问根结点的操作发生在遍历其左右子树之中(间)
遍历顺序:左子节点-根节点-右子节点
// 二叉树中序遍历
void InOrder(BTNode* root)
{
if (root == NULL) {
printf("NULL");
return;
}
InOrder(root->left);
printf("%c ", root->data);
InOrder(root->right);
}
3. 后序遍历(Postorder Traversal)
- 访问根结点的操作发生在遍历其左右子树之后
遍历顺序:左子节点-右子节点-根节点
// 二叉树后序遍历
void PostOrder(BTNode* root)
{
if (root == NULL) {
printf("NULL");
return;
}
PostOrder(root->left);
PostOrder(root->right);
printf("%c ", root->data);
}
二、普通二叉树遍历
1. 二叉树节点定义
链式结构且左孩子右孩子
typedef char BTDataType;
typedef struct BinaryTreeNode
{
struct BinaryTreeNode* left;
struct BinaryTreeNode* right;
BTDataType data;
}BTNode;
2. 二叉树初始化
弄一个简单的
BTNode* BuyNode(BTDataType x)
{
BTNode* node = (BTNode*)malloc(sizeof(BTNode))