1. 二叉树节点的创建(初始化)
*
* tree.c
*/
#include <stdlib.h>
#include "tree.h"
struct tree_node *tree_node_create(data_t data)
{
struct tree_node *tmp = malloc(sizeof(*tmp));
tmp->data = data;
tmp->left_child = NULL;
tmp->right_child = NULL;
return tmp;
}
struct tree_node *tree_create(int h)
{
struct tree_node *tmp;
if (h < 0)
return NULL;
tmp = tree_node_create(h);//若是创建链表,则是先建一个头节点,再用循环来,创建
剩下的节点! 而这里是用递归!
tmp->left_child = tree_create(h - 1);
tmp->right_child = tree_create(h - 1);
return tmp;
}
2.创建二叉树
3.遍历二叉树
void tree_pre_traverse(struct tree_node *root, visit_t visit)
{
if (NULL == root)
return ;
visit(root);
tree_pre_traverse(root->left_child, visit);
tree_pre_traverse(root->right_child, visit);
}
void tree_in_traverse(struct tree_node *root, visit_t visit)
{
if (NULL == root)
return ;
tree_in_traverse(root->left_child, visit);
visit(root);
tree_in_traverse(root->right_child, visit);
}
void tree_post_traverse(struct tree_node *root, visit_t visit)
{
if (NULL == root)
return ;
tree_post_traverse(root->left_child, visit);
tree_post_traverse(root->right_child, visit);
visit(root);
}
4.求二叉树的高度
5. 销毁二叉树
创建二叉树,要从root节点开始,用“先根遍历”的方式创建二叉树
若是销毁,则要最后一个销毁root节点,可用“后根遍历”的方式销毁二叉树
int tree_height(const struct tree_node *root)
{
int lh = 0, rh = 0;
if (NULL == root)
return -1;
lh = tree_height(root->left_child);
rh = tree_height(root->right_child);
return lh > rh ? (lh + 1) : (rh + 1);
}
void tree_destroy(struct tree_node *root)
{
if (NULL == root)
return ;
tree_destroy(root->left_child);
tree_destroy(root->right_child);
free(root);
}
-------------------------------------------------------------------
/*
* tree.h
*/
#ifndef __TREE_H__
#define __TREE_H__
typedef int data_t;
struct tree_node {
data_t data;
struct tree_node *left_child, *right_child;
};
typedef void (*visit_t)(struct tree_node *);
struct tree_node *tree_node_create(data_t data);
struct tree_node *tree_create(int h);
void tree_pre_traverse(struct tree_node *root, visit_t visit);
void tree_in_traverse(struct tree_node *root, visit_t visit);
void tree_post_traverse(struct tree_node *root, visit_t visit);
int tree_height(const struct tree_node *root);
void tree_destroy(struct tree_node *root);
#endif
------------------------------------------------测试文件:
#include <stdio.h>
#include "tree.h"
void visit(struct tree_node *node)
{
printf("%d ", node->data);
}
int main()
{
struct tree_node *root;
root = tree_create(3);
tree_pre_traverse(root, visit);
printf("\n");
printf("%d \n", tree_height(root));
tree_destroy(root);
tree_pre_traverse(root, visit);
return 0;
}
--------------------------------------------------------------
/*tree.h*/
typedef int data_t;
struct tree_node {
data_t data;
struct tree_node *left_child, *right_child;
};
struct tree_node create_tree_node(data_t data);
struct tree_node tree_init(int h);
void traverse_pre_tree(struct tree_node *root)
int height(struct tree_node *root)