zoukankan      html  css  js  c++  java
  • BST树

    #include <cstdlib>
    #include <iostream>
    #define N 10 
    using namespace std;
    typedef struct node *link;
    struct node {
           int item;
           link l,r;
           };
    link NODE(int item,link l,link r)
    {
     link t = (link)malloc(sizeof(struct node));
     t->item = item;
     t->l = l;
     t->r = r;
     return t;      
    }
    link insert_node(link t,int item)
    {
      if(t == NULL) return NODE(item,NULL,NULL);
      if(item < t->item)
    	  t->l = insert_node(t->l,item);
      else
    	  t->r = insert_node(t->r,item);
      return t;
    }
    //中序打印
    void inOrder(link root){
    if(root){
     inOrder(root->l);
     cout<<root->item<<"  ";
     inOrder(root->r);
    
             }
    }
    link bst_remove(link t,int item)
    {
      if(t == NULL) return NULL; //没找到,不做操作
      if(item < t->item)//小于,向左找
              t->l = bst_remove(t->l,item);
       else if(item > t->item)//大于。向右找 
              t->r = bst_remove(t->r,item);
       else  {//等于,做操作
        link x;
              if(t->l){//左子树不为空,在左子树取最大值替换当前需要删除的点 
                      for(x = t->l;x->r;x= x->r){;}//最大值在右边,x指向最大的节点(叶节点)
                       t->item = x->item; //把x拿上去;
                       t->l = bst_remove(t->l,t->item); 
                       }
                else if(t->r){//左子树为空。 
                     for(x = t->r;x->l;x = x->l){;}//最小值在左边 ,x指向最小的节点(叶节点) 
                     t->item = x->item;//把x拿上去 
                     t->r = bst_remove(t->r,t->item);
                      }
                else{//既没有左子树,又没有右子树,直接删除
                free(t);
                t = NULL;             
                     }      
             }  
         return t;//t为树的根节点 
    }
    int main(int argc, char *argv[])
    {
        srand(time(NULL));
        link root = NULL;
        int a[] = {1,40,20,11,9,5,17,18,88,29};
        for(int i =0;i<N;i++)
        {
                root = insert_node(root,a[i]);
         }
        
        inOrder(root);
        cout<<endl;
        root = bst_remove(root ,18);
        inOrder(root);
        system("PAUSE");
        return EXIT_SUCCESS;
    }
    


     

  • 相关阅读:
    Backtrader中文笔记之CSV Data Feed Development-General
    Backtrader中文笔记之CSV Data Feed Filters
    Backtrader中文笔记之CSV Data Feed Development
    Backtrader中文笔记之Extending a Datafeed
    Backtrader中文笔记之Data Feeds
    discuz功能列表
    phpcms功能列表
    empireCMS 帝国cms功能总结
    ecshop功能目录
    织梦所有功能导航列表介绍
  • 原文地址:https://www.cnblogs.com/dyllove98/p/3188625.html
Copyright © 2011-2022 走看看