标签:
二叉查找树的性质:对于树中的每一个节点X,它的左子树中所有关键字值小于X的关键字值,它的右子树中的所有关键字值大于X的关键字值。
二叉查找树的平均深度为O(logN),下面看一下它的相关的操作函数。
删除一个二叉树(递归形式):
void MakeEmpty(TreeNode *root)
{
if(root == NULL)
return;
MakeEmpty(root->left);
MakeEmpty(root->right)
free(root);
}
在二叉查找树中找都某个节点:
TreeNode* Find(TreeNode *root, int x)
{
if(root == NULL)
return NULL;
if(root->val > x)
return Find(root->left, x);
else if(root->val < x)
return Find(root->right, x);
else
return root;
}
在二叉查找树中找最大值:
//递归版本
TreeNode* FindMax(TreeNode *root)
{
if(root == NULL)
return NULL;
if(root->right == NULL)
return root->right
else
return FindMax(root->right);
}
//迭代版本
TreeNode* FindMax(TreeNode *root)
{
if(root == NULL)
return NULL;
while(root->right != NULL)
{
root = root->right;
}
retur root;
}
在编写算法之前,首先把测试用例写好真的很重要,因为测试用例的边界值就是递归函数的出口。
二叉查找树的插入操作:
二叉查找树的插入操作很简单,因为第一个要建立的结点一定是根节点,然后每一个结点的插入肯定在叶子结点的地方。
TreeNode* Insert(TreeNode *root, int x)
{
if(root == NULL)
{
root = (TreeNode*)malloc(sizeof(TreeNode));
root->val = x;
root->left = NULL;
root->right = NULL;
}
else
{
if(root->val > x)
root->left = Insert(root->left, x);
else if(root->val < x)
root->right = Insert(root->right, x);
}
return root;
}
标签:
原文地址:http://www.cnblogs.com/stemon/p/4764631.html