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
#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;
}
#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;
}