二叉查找树
对任何节点x,其左子树中的关键字最大不超过key[x],右子树中的关键字最小不小于key[x]。
二叉查找树这种数据结构,它支持多种动态集合操作,search,minimum,maximum,predecessor(前驱),successor(后继),insert以及delete。在二叉查找树上执行的基本操作时间与树的高度成正比。对于一棵含有n个节点的完全二叉树,这些操作的最坏情况的运行时间为O(lgn)。这点明显优于含有n个节点的线性链(线性链上执行这些操作最坏时间代价为O(n))。
C语言实现
这里通过随机生成100个整数并执行插入操作从而构建二叉查找树。
#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
#define SIZE 100
struct TreeNode
{
int value;
TreeNode* parent;
TreeNode* left;
TreeNode* right;
};
//T表示根节点
TreeNode* T = NULL;
TreeNode *x, *y;
TreeNode* treeInsert(TreeNode* T, int value)
{
//根据节点值创建一个新的节点
TreeNode* newNode = (TreeNode*)malloc(sizeof(TreeNode));
newNode -> value = value;
newNode -> parent = NULL;
newNode -> left = NULL;
newNode -&