二叉排序树是一种有重要应用意义的数据类型,在二叉排序树上能有效地进行查找操作。同时采用适当算法,根据一组关键字值可以方便地建立与之相应的二叉排序树。按照一定规则在二叉排序树上插入、删除结点仍能保持二叉排序树的性质。
(1)二叉排序树的插入操作
如何建立一棵二叉排序树以及如何在二叉排序树中插入一个新结点呢,实际上,只要解决了插入问题,建树过程就是从空树开始逐次插入新结点的操作,需要注意的是插入一个结点后的二叉树仍然为一棵二叉排序树。
具体做法是:动态生成一个新结点,若二叉排序树为空,则结点作为根结点插入;若非空,则用新结点的关键字值与根结点的关键字比较,若小于根结点的关键字值,新结点应插入左子树,否则,应插入右子树。在左子树或右子树上进行同样的操作,实际上这是一个递归过程。最后新结点的插入位置是二叉排序树中某结点的空指针位置。新结点是作为二叉排序树的叶结点插入,所以新结点插入时它的左、右指针均为空指针。
二叉排序树中插入新结点的非递归算法
#include #include #define MAX 5#define NULL 0Bnode * btInsert(int x, Bnode *root); void main(){ int i; int a[MAX]={60, 40, 70, 20, 80}; Bnode * root=NULL; for(i=0;ikey=x ; /*为新结点关键字赋值*/ p->right=p->left=NULL; /*新结点要作为叶结点插入*/ if(root==NULL) { root=p; return p; } q=root;