"데이터 구조 - C 언어 구현 트리(트리)"는 이진 트리를 구현하며 선위, 중위 및 후위 순회를 포함합니다.

#include <stdio.h>
#include <stdlib.h>

// 定义二叉树的节点结构体
struct TreeNode {
    int val;
    struct TreeNode *left;
    struct TreeNode *right;
};

// 创建一个新的节点
struct TreeNode* new_node(int val) {
    struct TreeNode* node = (struct TreeNode*) malloc(sizeof(struct TreeNode));
    node->val = val;
    node->left = NULL;
    node->right = NULL;
    return node;
}

// 插入节点
struct TreeNode* insert_node(struct TreeNode* root, int val) {
    if (root == NULL) {
        root = new_node(val);
        return root;
    }
    if (val < root->val) {
        root->left = insert_node(root->left, val);
    } else {
        root->right = insert_node(root->right, val);
    }
    return root;
}

// 前序遍历
void preorder_traversal(struct TreeNode* root) {
    if (root != NULL) {
        printf("%d ", root->val);
        preorder_traversal(root->left);
        preorder_traversal(root->right);
    }
}

// 中序遍历
void inorder_traversal(struct TreeNode* root) {
    if (root != NULL) {
        inorder_traversal(root->left);
        printf("%d ", root->val);
        inorder_traversal(root->right);
    }
}

// 后序遍历
void postorder_traversal(struct TreeNode* root) {
    if (root != NULL) {
        postorder_traversal(root->left);
        postorder_traversal(root->right);
        printf("%d ", root->val);
    }
}

int main() {
    // 创建一个二叉树
    struct TreeNode* root = new_node(5);
    insert_node(root, 3);
    insert_node(root, 7);
    insert_node(root, 2);
    insert_node(root, 4);
    insert_node(root, 6);
    insert_node(root, 8);

    // 前序遍历二叉树并输出结果
    printf("前序遍历结果:");
    preorder_traversal(root);
    printf("\n");

    // 中序遍历二叉树并输出结果
    printf("中序遍历结果:");
    inorder_traversal(root);
    printf("\n");

    // 后序遍历二叉树并输出结果
    printf("后序遍历结果:");
    postorder_traversal(root);
    printf("\n");

    return 0;
}

TreeNode이 예제에서는 먼저 이진 트리의 노드를 나타내는 struct라는 구조를 정의합니다 . 또한 new_node새 노드를 만들고 해당 값과 자식 노드 포인터를 초기화하는 함수를 정의합니다.

함수 에서 insert_node이진 트리에 노드를 삽입하는 기능을 구현합니다. 트리가 비어 있으면 새 노드를 만들고 반환합니다. 노드 값이 루트 노드보다 작으면 왼쪽 하위 트리에 삽입되고 그렇지 않으면 오른쪽 하위 트리에 삽입됩니다.

함수 에서 preorder_traversal이진 트리를 선순으로 순회하는 함수를 구현합니다. 먼저 루트 노드를 방문한 다음 왼쪽 노드를 순회합니다.

하위 트리를 탐색하고 마지막으로 오른쪽 하위 트리를 탐색합니다. 함수 에서는 inorder_traversal이진 트리를 순서대로 순회하는 함수를 구현합니다. 먼저 왼쪽 하위 트리를 순회한 다음 루트 노드를 방문하고 마지막으로 오른쪽 하위 트리를 순회합니다. 함수 에서 postorder_traversal우리는 이진 트리의 후위 순회 기능을 구현합니다. 먼저 왼쪽 하위 트리를 순회한 다음 오른쪽 하위 트리를 순회하고 마지막으로 루트 노드를 방문합니다.

main함수 에서 먼저 새 이진 트리를 만들고 일부 노드를 삽입합니다. 그런 다음 및 함수를 각각 호출하여 이 이진 트리에서 사전 순서, 순서 및 사후 순회를 수행하고 순회 결과를 출력 preorder_traversal합니다 inorder_traversal.postorder_traversal

위의 코드는 이진 트리 및 사전 순서, 순서 및 사후 순회 구현을 보여주는 간단한 예일 뿐입니다. 실제로 실제 응용에서는 이진 트리의 균형, 노드 삽입 및 삭제의 알고리즘 효율성 등과 같은 몇 가지 추가 요소를 고려해야 합니다.

추천

출처blog.csdn.net/Like_Bamboo/article/details/129683389