数据结构——二叉查找树

港控/mmm° 2022-06-17 04:25 353阅读 0赞

二叉查找树

二叉查找树满足以下条件:
1.左子树上的所有节点值均小于根节点的值;
2.右子树上的所有节点值均大于根节点的值;
3.左右子树也满足上述条件。

二叉查找树的查找操作

这个操作需要返回指向树T中具有关键字X的节点的指针。若节点T中的关键字是X则返回T,若T中的关键字不是X,则对左子树或者右子树递归调用查找操作,若不存在这样的节点则返回NULL。

实现代码如下:
  1. Tree Find(ElemType X,Tree T)
  2. {
  3. if(T==NULL)
  4. return NULL;
  5. if(X > T->data)
  6. return Find(T->right);
  7. else if(X < T->data)
  8. return Find(T->left);
  9. else
  10. return T;
  11. }

若是在二叉查找树中寻找最小值或是最大值时只需要从根节点向左子树或者右子树递归就可以。

二叉查找树的插入操作

为了将X插入到树T中,可以像Find那样沿着树查找,如果找到X则什么也不做,如果找不到则将X插入到遍历的路径上的最后一点上。

实现代码如下:
  1. Tree Insert(ElemType X,Tree T)
  2. {
  3. if(T == NULL)
  4. {
  5. T = malloc(sizeof(Tree));
  6. T->data = X;
  7. T->left = NULL;
  8. T->right = NULL;
  9. }
  10. esle if(X < T->data)
  11. {
  12. T->left = Insert(X,T->left);
  13. }
  14. else if(X > T->data)
  15. {
  16. T->right = Insert(X,T->right);
  17. }
  18. return T;
  19. }

二叉查找树的删除操作

如果节点是一片树叶,那么它可以被立即删除。如果及诶但有一个儿子,则该节点可以在其父节点调整指针绕过该节点后被删除,所删除的节点现在已不再引用,而该节点只有在指向它的指针已被省去的情况下才能被去掉。

复杂的情况是处理具有两个儿子的节点。一般的删除的策略是用其右子树的最小数据代替该节点的数据并递归删除那个节点。因为右子树中的最小节点不可能有左儿子,所以第二次删除要容易。

  1. 6
  2. / \
  3. 2 8
  4. / \
  5. 1 5
  6. /
  7. 3
  8. \
  9. 4

例如:要删除图中的节点2时,首先用右子树的最小节点 3 代替 2 ,并递归调用函数删除节点 3 。

  1. Tree Delete(ElemType X,Tree T)
  2. {
  3. Tree tmpCell;
  4. if(T == NULL)
  5. Error("X not found");
  6. else if(X < T->data)
  7. {
  8. T->left = Delete(X,T->left);
  9. }
  10. else if(X > T->data)
  11. T->right = Delete(X,T->right);
  12. else if(T->left && T->right) //two children
  13. {
  14. tmpCell = FindMin(T->right);
  15. T->data = tmpCell->data;
  16. T->right = Delete(tmpCell->data,T->right);
  17. }
  18. else // One or zero child
  19. {
  20. tmpCell = T;
  21. if(T->left == NULL)
  22. T = T->right;
  23. else if(T->right == NULL)
  24. T = T->left;
  25. free(tmpCell);
  26. }
  27. return T;
  28. }

发表评论

表情:
评论列表 (有 0 条评论,353人围观)

还没有评论,来说两句吧...

相关阅读

    相关 数据结构:JavaScript实现查找

    二叉树是一种特殊的树,它的子节点个数不超过两个。 二叉查找树是一种是一种特殊的二叉树,相对较小的值保存在左节点中,较大的保存在右节点中,这一特性使得查找效率大大提高。