/*************************************************************************
用递归的方法进行二叉树的搜索和插入
当然二叉树的搜索和插入可以不用递归的方法,而且一般情况下递归也不是一
个很好的解决问题的方案,以下函数用一种严谨实现方法仅体现一种考虑问题的思想,
锻炼人严谨的思维方式。
Leo,2005/10/6
stefzeus@163.com
*************************************************************************/
/*TreeSearch:search for target starting st node root
pre: The tree root points has been created.
post: The function returns a pointer to a tree node that matches
target or NULL if the target is not in the tree */
用递归的方法进行二叉树的搜索和插入
当然二叉树的搜索和插入可以不用递归的方法,而且一般情况下递归也不是一
个很好的解决问题的方案,以下函数用一种严谨实现方法仅体现一种考虑问题的思想,
锻炼人严谨的思维方式。
Leo,2005/10/6
stefzeus@163.com
*************************************************************************/
/*TreeSearch:search for target starting st node root
pre: The tree root points has been created.
post: The function returns a pointer to a tree node that matches
target or NULL if the target is not in the tree */
TreeNode *TreeSearch(TreeNode *root,KeyType target)
{
if(root)
{
if(target < root->entry.key)
root=TreeSearch(root->left,target);
else if(target > root->entry.key)
root=TreeSearch(root->right,target);
}
return root;
}
{
if(root)
{
if(target < root->entry.key)
root=TreeSearch(root->left,target);
else if(target > root->entry.key)
root=TreeSearch(root->right,target);
}
return root;
}
/*InsertTree:insert a new node in the tree
pre: The tree root points has been created.The parameter newnode points to a node that has been created
and contains a key in its
post: The node newnode has been inserted into the tree in such a way
that the properties of a binary search tree are preserved. */
TreeNode *InsertTree(TreeNode *root,TreeNode *newnode)
{
if(!root)
{
root=newnode;
root->left=root->right=NULL;
}
else if (newnode->entry.key < root->entry.key)
root->left=InsertTree(root->left,newnode);
else
root->right=InsertTree(root->right,newnode);
return root;
}
post: The node newnode has been inserted into the tree in such a way
that the properties of a binary search tree are preserved. */
TreeNode *InsertTree(TreeNode *root,TreeNode *newnode)
{
if(!root)
{
root=newnode;
root->left=root->right=NULL;
}
else if (newnode->entry.key < root->entry.key)
root->left=InsertTree(root->left,newnode);
else
root->right=InsertTree(root->right,newnode);
return root;
}