`
北极的。鱼
  • 浏览: 158966 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

【转】二叉搜索树的建立, 查找, 删除操作...

 
阅读更多

转自: http://blog.csdn.net/cnnumen/article/details/5727328

 

#include <cstdlib>
#include <iostream>
using namespace std;
typedef struct _NODE
{
    int value;
    struct _NODE *left;
    struct _NODE *right;
    
    _NODE(int value) : value(value), left(NULL),  right(NULL) {};
}NODE, *PTRNODE;
void insert(PTRNODE &root, int value)
{
    if(root == NULL)
        root = new NODE(value);
    else
    {   
        if(value < root->value)
            insert(root->left, value);
        else if(value > root->value)
            insert(root->right, value);
        else
            cout << "duplicated value" << endl;
    }
}
void clear(PTRNODE &root)
{    
     if(root != NULL)
     {
         clear(root->left);
         clear(root->right);
         
         delete root;
         root = NULL;
     }
}
void _search(PTRNODE root, int searchVal)
{
   if(root == NULL)
   {
       cout << "not find... " << endl;
       return;
   }
   
   if(searchVal < root->value)
       _search(root->left, searchVal);
   else if(searchVal > root->value)
       _search(root->right, searchVal);
   else
       cout << "find... " << endl;
}
int main(int argc, char *argv[])
{
    PTRNODE root = NULL;
    
    cout << "init is: " << endl;
    for(int i=0; i<10; i++)
    {
        int value = rand() % 100;
        cout << value << " ";
        
        insert(root, value);
    }
    
    cout << endl;
    
    cout << "pre order result is: " << endl;
    preOrder(root);
    cout << endl;
    
    cout << "in order result is: " << endl;
    inOrder(root);
    cout << endl;
    
    cout << "post order result is: " << endl;
    postOrder(root);
    cout << endl;
    
    cout << "please input a search value: ";
    int searchVal;
    cin >> searchVal;
    _search(root, searchVal);
    
    clear(root);
    
    system("PAUSE");
    return EXIT_SUCCESS;
}

 计算二叉树节点数量和高度的实现如下:

int getSize(PTRNODE root)
{
    if(root == NULL)
        return 0;
    
    return 1 + getSize(root->left) + getSize(root->right);    
}
int getHeight(PTRNODE root)
{
    if(root == NULL)
        return -1;
    return 1 + max(getHeight(root->left), getHeight(root->right));
}

 二叉树的拷贝和比较实现如下:

PTRNODE copy(const PTRNODE root)
{
    if(root == NULL)
        return NULL;
        
    PTRNODE temp = new NODE(0);
    temp->value = root->value;
    
    temp->left = copy(root->left);
    temp->right = copy(root->right);
    
    return temp;
}
bool isEqual(const PTRNODE tree1, const PTRNODE tree2)
{
    if(tree1 == NULL && tree2 == NULL)
        return true;
    
    if(tree1 != NULL && tree2 != NULL && tree1->value == tree2->value
        && isEqual(tree1->left, tree2->left) && isEqual(tree1->right, tree2->right))
        return true;
    return false;
}

 

分享到:
评论

相关推荐

    1.二叉搜索树的建立 2.二叉搜索树节点的查找 3.二叉搜索树节点的删除 4.二叉搜索树的中序、后序递归遍历 5.二叉搜索树的中序、后序非递归遍历

    1.二叉搜索树的建立 2.二叉搜索树节点的查找 3.二叉搜索树节点的删除 4.二叉搜索树的中序、后序递归遍历 5.二叉搜索树的中序、后序非递归遍历 6.二叉搜索树查找某个节点的前驱(下一个值比当前节点x大的节点)

    采用二叉链式结构做存储结构的二叉排序树建立和查找算法

    二叉排序树,又称二叉查找树或二叉搜索树,是一种特殊的二叉树数据结构,它具有以下特性:对于树中的每个节点,其左子树中的所有节点的值都小于该节点的值,而右子树中的所有节点的值都大于该节点的值。这种性质使得...

    c语言实现二叉搜索树

    1.实现二叉搜索树的基本操作 2.包括建立,查找,删除,显示 3.得到最长路径和最短路径,并能分别计算长度

    二叉搜索树建立和操作

    这种特性使得二叉搜索树非常适合进行查找、插入和删除等操作。 ### 插入操作 在二叉搜索树中插入一个新节点是相当直观的。首先,从根节点开始,如果新键小于当前节点的键,就向左子树移动;如果新键大于当前节点的...

    数据结构二叉树二叉搜索树堆相关C++代码.docx

    这种特性使得二叉搜索树在查找、插入和删除操作中具有高效的性能。 3. **堆**:堆是一种特殊的树形数据结构,通常为完全二叉树,分为最大堆和最小堆。在最大堆中,每个节点的值都大于或等于其子节点的值,根节点是...

    数据结构二叉树二叉搜索树堆相关C++代码.pdf

    这种特性使得二叉搜索树非常适合进行查找操作。 【二叉树的操作】 在二叉树中,常见的操作包括插入新节点、删除节点、查找节点以及遍历。例如,`TreeNode` 类在 `CLASS.h` 文件中被定义,它包含了节点的数据值、...

    二叉排序树 c 版本

    这种特性使得二叉排序树在查找、插入和删除操作上具有较高的效率。 在C语言中,二叉排序树可以通过结构体来表示。以下是一个简单的二叉排序树节点结构体定义: ```c typedef struct BiTNode { char data; // 数据...

    MIT算法导论公开课之课程笔记 9.二叉搜索树.rar

    这一特性使得二叉搜索树在查找、插入和删除操作上具有较高的效率。 1. 查找操作:在二叉搜索树中查找特定键的节点时,可以从根节点开始,如果键等于当前节点的键,则查找成功;如果键小于当前节点的键,则在左子树...

    二叉排序树操作

    这种结构使得在二叉排序树中进行查找、插入和删除操作的效率较高,特别是对于近乎平衡的树,其时间复杂度可以达到O(log n)。 在`main.cpp`文件中,我们可以期待看到关于二叉排序树基本操作的实现,包括以下部分: ...

    二叉排序树的建立,删除,查找,动态

    二叉排序树(Binary Sort Tree,BST),也称为二叉搜索树,是一种特殊的二叉树数据结构,它的每个节点都包含一个键值,且满足以下性质:对于任意节点,其左子树中的所有节点的键值都小于该节点的键值,而右子树中的...

    二叉树的各种遍历,二叉搜索树的建立,前中序构建二叉树

    二叉树是计算机科学中一种重要的数据结构,它由节点构成,每个节点最多有两个...二叉搜索树则在实际应用中展现出高效性,特别是在需要快速查找和排序的场景。通过学习和实践这些概念,我们可以更好地应对各种编程挑战。

    二叉排序树相关操作

    这种特性使得在二叉排序树中进行查找、插入和删除操作的时间复杂度可以达到最优的O(logn),在最坏情况下可能退化为链表,此时时间复杂度为O(n)。 1. **插入操作**:`InsertBST` 函数实现了在二叉排序树中插入一个新...

    二叉排序树的C语言实现

    二叉排序树,又称二叉查找树或二叉搜索树,是一种特殊的二叉树数据结构,它具有以下特性:对于树中的每个节点,其左子树中的所有节点的值都小于该节点的值,而右子树中的所有节点的值都大于该节点的值。这种性质使得...

    数据结构综合课设二叉排序树.docx

    二叉排序树,也称为二叉搜索树,是一种特殊类型的二叉树,它的每个节点都遵循以下规则: 1. 左子树中的所有节点的值都小于当前节点的值。 2. 右子树中的所有节点的值都大于当前节点的值。 3. 左右子树也必须是二叉...

    折半查找、二叉排序树、链式哈希表的建立与查找

    #### 二、二叉排序树的建立、查找与删除 **定义**:二叉排序树(Binary Search Tree,BST)是一种特殊的二叉树,其中每个节点的值都大于其左子树中的所有节点的值,并且小于其右子树中的所有节点的值。 **建立二叉...

    二叉排序树增删改查

    二叉排序树(Binary Sort Tree,BST),也称为二叉搜索树,是一种特殊的二叉树数据结构,它具有以下特性: 1. 每个节点包含一个键(key)、一个关联的值、一个指向左子节点的引用和一个指向右子节点的引用。 2. ...

    用顺序和二叉链表作存储结构实现二叉排序树

    该设计要求我们完成四个基本操作:创建二叉搜索树、中序遍历、查找结点和删除结点。 二、C/C++语言简介 C 语言是一种结构化语言,具有层次清晰、易于调试和维护的特点。C语言的表现能力和处理能力极强,可以直接...

    数据结构与算法设计课程设计二叉排序树与平衡二叉树.doc

    6. **平衡二叉树(AVL树)**:AVL树是最早的自平衡二叉搜索树,每个节点的两个子树高度差不超过1,以确保查找效率。AVL树的插入和删除操作后可能需要进行旋转操作来恢复平衡。 7. **中序输出平衡二叉树**:同样,对...

    二叉排序树实现教师成果管理系统源码

    二叉排序树(Binary Sort Tree,BST),也称为二叉搜索树,是一种特殊的二叉树数据结构,它的每个节点都包含一个键值,且满足以下性质:对于任意节点,其左子树中所有节点的键值均小于该节点的键值;其右子树中所有...

    二叉排序树的建立、插入、删除和查找.doc

    这种结构使得二叉排序树非常适合进行查找、插入和删除操作。 在文档描述的程序中,使用了C语言编写,并在VC++6.0环境下运行。程序实现了以下主要功能: 1. **建立二叉排序树**:根据输入的一组关键值,构建相应的...

Global site tag (gtag.js) - Google Analytics