#include<stdio.h>
#include<stdlib.h>
typedef struct node
{
int data;
struct node * left;
struct node * right;
} Node;
typedef struct {
Node * root;
} Tree;
void insert(Tree * tree, int value) {
Node * node = (Node *)malloc(sizeof(Node));
node->data = value;
node->left = NULL;
node->right = NULL;
if (tree->root == NULL)
{
tree->root = node;
} else {
Node * temp = tree->root;
while (temp != NULL)
{
if (value < temp->data)
{
if (temp->left == NULL)
{
temp->left = node;
return;
} else {
temp = temp->left;
}
} else {
if (temp->right == NULL)
{
temp->right = node;
return;
} else {
temp = temp->right;
}
}
}
}
}
void preorder(Node * node) {
if (node != NULL)
{
printf("%d ", node->data);
preorder(node->left);
preorder(node->right);
}
}
void inorder(Node * node) {
if (node != NULL)
{
inorder(node->left);
printf("%d ", node->data);
inorder(node->right);
}
}
void postorder(Node * node) {
if (node != NULL)
{
postorder(node->left);
postorder(node->right);
printf("%d ", node->data);
}
}
// 求树的高度
int get_height(Node * node) {
if (node == NULL)
{
return 0;
} else {
int left_h = get_height(node->left);
int right_h = get_height(node->right);
int max = left_h;
if (right_h > left_h)
{
max = left_h;
}
return max + 1;
}
}
int get_maximum(Node * node) {
if (node == NULL)
{
return -1;
} else {
int left_max = get_maximum(node->left);
int right_max = get_maximum(node->right);
int current = node->data;
int max = left_max;
if (right_max > left_max)
{
max = right_max;
}
if (current > max)
{
max = current;
}
return max;
}
}
// 二叉搜索树
int main(void) {
int arr[] = {6,3,8,2,5,1,7};
Tree tree;
tree.root = NULL;
for (int i = 0; i < 7; i++)
{
insert(&tree, arr[i]);
}
printf("\n");
preorder(tree.root);
printf("\n");
inorder(tree.root);
printf("\n");
postorder(tree.root);
int h = get_height(tree.root);
printf("\n树的高度为 %d\n", h);
int max = get_maximum(tree.root);
printf("\n树的最大值 %d\n", max);
return 0;
}
运行效果