美文网首页
二叉查找树

二叉查找树

作者: 1nvad3r | 来源:发表于2020-08-25 14:26 被阅读0次
二叉查找树的基本操作
#include <cstdio>

const int maxn = 1010;

struct Node {
    int data;
    struct Node *lchild, *rchild;
} nodes[maxn];

//查找
void search(Node *root, int x) {
    if (x == root->data) {
        printf("%d\n", root->data);
    } else if (x < root->data) {
        search(root->lchild, x);
    } else {
        search(root->rchild, x);
    }
}

//插入
void insert(Node *&root, int x) {
    if (root == NULL) {
        root = new Node;
        root->data = x;
        root->lchild = root->rchild = NULL;
        return;
    }
    if (x < root->data) {
        insert(root->lchild, x);
    } else {
        insert(root->rchild, x);
    }
}

//建立
Node *create(int data[], int n) {
    Node *root = NULL;
    for (int i = 0; i < n; i++) {
        insert(root, data[i]);
    }
    return root;
}

Node *findMax(Node *root) {
    while (root->rchild != NULL) {
        root = root->rchild;
    }
    return root;
}

Node *findMin(Node *root) {
    while (root->lchild != NULL) {
        root = root->lchild;
    }
    return root;
}

//删除
void deleteNode(Node *&root, int x) {
    if (root == NULL) {
        return;
    }
    if (root->data == x) {
        if (root->lchild == NULL && root->rchild == NULL) {//叶子结点直接删除
            root = NULL;
        } else if (root->lchild != NULL) {
            Node *pre = findMax(root->lchild);//找root前驱
            root->data = pre->data;//前驱覆盖root
            deleteNode(root->lchild, pre->data);//删前驱
        } else {
            Node *next = findMin(root->rchild);
            root->data = next->data;
            deleteNode(root->rchild, next->data);
        }
    } else if (root->data > x) {
        deleteNode(root->lchild, x);
    } else {
        deleteNode(root->rchild, x);
    }
}
对二叉查找树进行中序遍历,遍历的结果是有序的。

1043 Is It a Binary Search Tree

1064 Complete Binary Search Tree

1099 Build A Binary Search Tree

相关文章

  • 极客时间数据结构与算法之美笔记25~26

    二叉树到二叉查找树,是为了查找数据的效率接近logN。 二叉查找树到平衡二叉查找树,是为了防止二叉查找树沦为链表。...

  • 二叉查找树

    1)二叉查找树是什么?2)二叉查找树的插入、删除、查找?3)Go代码实现 一、二叉查找树是什么?二叉查找树(BST...

  • 红黑树

    红黑树的本质就是一棵二叉查找树,所以先从二叉查找树来了解起。 二叉查找树 二叉查找树又称有序二叉树,具有以下特性:...

  • 二叉查找树

    二叉查找树,又称二叉搜索树 二叉查找树也称为有序二叉查找树,满足二叉查找树的一般性质,是指一棵空树具有如下性质: ...

  • 99-数据结构和算法

    难点:二叉树的遍历 红黑树 图的遍历 二叉查找树二叉查找树(binary search tree),二叉查找树在二...

  • 11-二叉查找树

    二叉查找树 1.什么是二叉查找树? 二叉查找树是一种支持数据动态的插入,删除,查找的数据结构。 2.二叉查找树的设...

  • 17张图带你解析红黑树的原理!保证你能看懂!

    二叉查找树 由于红黑树本质上就是一棵二叉查找树,所以在了解红黑树之前,咱们先来看下二叉查找树。 二叉查找树(Bin...

  • 二叉树 堆 2019-04-17

    二叉树 实现一个二叉查找树,并且支持插入、删除、查找操作 实现查找二叉查找树中某个节点的后继、前驱节点 实现二叉树...

  • 6. 二叉树创建-查找

    1. 递归方式实现二叉树的构建2. 树、二叉树、二叉查找树3. 二叉树排序树的理解4. 二叉查找树5. 二叉树的查找

  • 数据结构中的各种树

    一、二叉树 二、二叉查找树(又称二叉排序树,二叉搜索树) 二叉查找树(Binary Search Tree)它或者...

网友评论

      本文标题:二叉查找树

      本文链接:https://www.haomeiwen.com/subject/rjnkjktx.html