數據結構 排序二叉樹|聖誕樹

Description

請完成下面四個函數的定義(在tree.h文件中),使整個程序能夠利用排序二叉樹的結構對輸入的數(不會出現相同的數),進行排序輸出。節點的結構體在下面已給出,這個二叉樹的特徵是,左子樹中所有節點的值肯定比父節點小,右子樹所有節點的的值肯定比父節點的大。要求大家按照這個結構特徵去構建二叉樹,最後中序遍歷輸出就是我們要求的升序輸出。


樹的節點結構體爲:

typedef struct Node {
    struct Node *left;
    struct Node *right;
    int value;
} Node;

中序遍歷這個二叉樹,按照升序輸出,每個數之間有一個空格,最後一個數後也有一個空格。

void traverse_tree_inorder(Node *p);

回收建立二叉樹時開闢的內存空間,提示類似後序遍歷。

void recycle_nodes(Node *p);

將一個值爲value的數插入到這個樹中,但是要注意,需要插到哪個地方,按照排序二叉樹的要求來。

void insert_node(Node *p, int value);

創建一個根節點,初始化並返回。

Node* init_root(int value);

sample input

5
23 3 53 333 2

sample output

2 3 23 53 333

main.c
#include <stdio.h>
#include <stdlib.h>
#include "tree.h"
 
int main(void) {
    int node_num, i = 0, temp;
    Node *root = NULL;
    scanf("%d", &node_num);
    while (i < node_num) {
        scanf("%d", &temp);
        if (i == 0) root = init_root(temp);
        else insert_node(root, temp);
        i++;
    }
    traverse_tree_inorder(root);
    printf("\n");
    recycle_nodes(root);
    return 0;
}

tree.h
#include <stdio.h>
#include <stdlib.h>
 
typedef struct Node {
    struct Node *left;
    struct Node *right;
    int value;
} Node;
Node* init_root(int value);
Node* create_node(int value);
void insert_node(Node *p, int value);
void traverse_tree_inorder(Node *p);
void recycle_nodes(Node *p);

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

typedef struct Node
{
    struct Node * left;
    struct Node * right;
    int value;
} Node;

void traverse_tree_inorder(Node * p);
void recycle_nodes(Node * p);
void insert_node(Node * p, int value);
Node * init_root(int value);

void traverse_tree_inorder(Node * p)
{
    if (p != NULL)
    {
        traverse_tree_inorder(p -> left);
        printf("%d ", p -> value);
        traverse_tree_inorder(p -> right);
    }
}

void recycle_nodes(Node * p)
{
    if (p != NULL)
    {
        recycle_nodes(p -> left);
        recycle_nodes(p -> right);
        free(p);
        p = NULL;
    }
}

void insert_node(Node * p, int value)
{
    if (value < p -> value)
    {
        if (p -> left == NULL)
            p -> left = init_root(value);
        else
            insert_node(p -> left, value);
    }
    else
        if (p -> right == NULL)
            p -> right = init_root(value);
        else
            insert_node(p -> right, value);
}

Node * init_root(int value)
{
    Node * temp = (Node *)malloc(sizeof(struct Node));
    temp -> left = NULL;
    temp -> right = NULL;
    temp -> value = value;
    return temp;
}



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章