`
北极的。鱼
  • 浏览: 150624 次
  • 性别: 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;
}

 

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics