二叉树的结点定义及遍历
2017-09-28 本文已影响0人
tingshuo123
#include <stdio.h>
#include <stdlib.h>
// 树的结点的结构定义
typedef struct node {
int data;
struct node* Left;
struct node* Right;
} Node;
// 先序遍历 访问根 -> 左子结点 -> 右子结点
void preorder(Node* node) {
if (node != NULL) {
printf("%d\n", node->data);
preorder(node->Left);
preorder(node->Right);
}
}
// 中序遍历 左子结点 -> 访问根 -> 右子结点
void inorder(Node* node) {
if (node != NULL) {
inorder(node->Left);
printf("%d\n", node->data);
inorder(node->Right);
}
}
// 后序遍历 左子结点 -> 右子结点 -> 访问根
void postorder(Node* node) {
if (node != NULL) {
postorder(node->Left);
postorder(node->Right);
printf("%d\n", node->data);
}
}
int main(void)
{
// 创建结点
Node n1;
Node n2;
Node n3;
Node n4;
// 赋值
n1.data = 5;
n2.data = 6;
n3.data = 7;
n4.data = 8;
// 确定各结点的关系
n1.Left = &n2;
n1.Right = &n3;
n2.Left = &n4;
n2.Right = NULL; // 没有子结点就指向 NULL
n3.Left = NULL;
n3.Right = NULL;
n4.Left = NULL;
n4.Right = NULL;
// 遍历结点
printf("先序遍历结果:\n");
preorder(&n1);
printf("中序遍历结果:\n");
inorder(&n1);
printf("后序遍历结果:\n");
postorder(&n1);
return 0;
}