二叉树是树的一种特殊形式,它的每个子节点至多具有2个孩子,分别是左孩子和右孩子,另外,每个节点的值比它的左子树的所有节点都大,但比它的右子树的所有节点都小,所以有了这个规则,树中就不会有重复的元素,这个特性也使二叉搜索树成为一种用关键值快速查找数据的优秀工具。
二叉树的操作包括:插入节点、删除节点、查找节点、遍历节点。
虽然二叉树也可以使用静态数组来实现,但是显然使用链表来实现更合理,也更方便,这里就只关心链表的实现了。
typedef int TREE_TYPE;
typedef struct TREE_NODE {
struct TREE_NODE *left;
struct TREE_NODE *right;
TREE_TYPE value;
}TreeNode;
static TreeNode *tree;
void insert(TREE_TYPE value) {
TreeNode *current;//测试节点
TreeNode **link;//插入的目标节点
//从根节点开始寻找插入的位置
link = &tree;
//根据二叉树的特点,一直向下寻找合适的插入位置
while((current = *link) != NULL) {
if (value < current->value) {
link = ¤t->left;
} else {
assert(current->value != value);//不能重复
link = ¤t->right;
}
}
//创建新节点
current = malloc(sizeof(TreeNode));
assert(current != NULL);
current->value = value;
current->left = NULL;
current-