非递归实现二叉排序树
二叉树的定义就是根据递归来定义的,所以用递归实现比较简单,非递归就相对来说比较复杂。
下面就说一说搜索二叉树的非递归操作。
void SearchTreeInsert(SearchTreeNode **root, SearchTreeType key)
{
if (root == NULL) //非法输入
return;
SearchTreeNode* cur = *root;
SearchTreeNode* newnode = CreateNewNode(key);
//1.树为空,则直接插入
if (*root == NULL)
{
*root = newnode;
return;
}
//2.树不为空,则按照二叉搜索树的性质查找插入位置,插入新节点
else
{
//定义一个父节点,用于判断插入结点应在左子树还是右子树。
SearchTreeNode* parent = *root;
//cur:用parent与key进行比较之后,可能能插入元素的位置
//cur为空则表示当前就是要插入的位置
while (cur!=NULL)
{
parent = cur;
if (key > parent->key)
{
cur = parent->rchild;
}
else if (key < parent->key)
{
cur = parent->lchild;
}
else //二叉搜索树不允许有相同的元素存在。
return;
}