C语言数据结构

二叉树的结点定义及遍历

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;
}
上一篇下一篇

猜你喜欢

热点阅读