二叉查找树

Code:
  1. //有待完善~~~大家有什么意见可以说说啊~~~   
  2.   
  3. #include<iostream>   
  4. using namespace std;   
  5. struct NodeTree    
  6. {   
  7.  int val;   
  8.  struct NodeTree * lefttree;   
  9.  struct NodeTree * righttree;   
  10.  NodeTree(int item, NodeTree *left = NULL, NodeTree *right = NULL)   
  11.         : val(item), lefttree(left), righttree(right)  //构造函数默认的lefttree,righttree为NULL   
  12.     {   
  13.     }   
  14. };   
  15. class BinaryTree   
  16. {   
  17. public:   
  18.  BinaryTree(){root =NULL;}   
  19.  //迭带插入的方法建二叉搜索树   
  20.     void Insert(const int node)                                                   
  21.     {                                        
  22.         NodeTree *currentpointer;        //当前节点指针     
  23.         NodeTree *parentpointer;         //父亲节点指针       
  24.         NodeTree *newpointer;    
  25.         //ptr必须为根节点指针的引用   
  26.         NodeTree *ptr = root;   
  27.         newpointer = new NodeTree(node); //新动态分配一个节点   
  28.      
  29.         if(root == NULL)    //如果此时树为空,返回新开辟的节点   
  30.         {   
  31.             root = newpointer;   
  32.         }   
  33.         else  
  34.         {   
  35.             currentpointer = ptr;        //保存root指针   
  36.    //一直移动到是使parentpointer指向叶子节点而currentpointer为NULL   
  37.             while(currentpointer != NULL)    //当当前节点不为空的情况下   
  38.             {   
  39.                 parentpointer = currentpointer; //用指向父亲节点的指针保存当前指针   
  40.        
  41.                 if(currentpointer->val > node)   
  42.                 {   
  43.                     currentpointer = currentpointer->lefttree;   
  44.                 }   
  45.                 else  
  46.                 {   
  47.                     currentpointer = currentpointer->righttree;   
  48.                 }   
  49.             }   
  50.             //以下是将节点插入   
  51.             if(parentpointer->val > node)   
  52.             {   
  53.                 parentpointer->lefttree = newpointer;   
  54.             }   
  55.             else  
  56.             {   
  57.                 parentpointer->righttree = newpointer;   
  58.             }   
  59.         }   
  60.     }   
  61.     
  62.  //创建方法,依次插入   
  63.     NodeTree *Creat(int data[],int len)    
  64.     {   
  65.         for(int i=0; i<len; i++)   
  66.         {   
  67.             Insert(data[i]);   
  68.         }   
  69.         return root;   
  70.     }   
  71.  void PreOrder()   
  72.     {   
  73.         cout<<"前序遍历的结果为:";   
  74.         PrePrint(root);   
  75.     }   
  76.  void InOrder()   
  77.     {   
  78.         cout<<"中序遍历的结果为:";   
  79.         InPrint(root);   
  80.     }   
  81.     
  82.     void PostOrder()   
  83.     {   
  84.         cout<<"后序遍历的结果为:";   
  85.         PostPrint(root);   
  86.     }   
  87.   
  88.  void PrePrint(NodeTree *p) //前序遍历   
  89.     {   
  90.         if(p != NULL)   
  91.         {   
  92.             cout << p->val << ',';   
  93.             PrePrint(p->lefttree);   
  94.             PrePrint(p->righttree);   
  95.         }   
  96.     }   
  97.  void InPrint(NodeTree *p)  //中序遍历   
  98.     {   
  99.         if(p != NULL)   
  100.         {   
  101.             InPrint(p->lefttree);   
  102.             cout<< p->val<<',';   
  103.             InPrint(p->righttree);   
  104.         }   
  105.     }   
  106.     void PostPrint(NodeTree *p)  //后序遍历   
  107.     {   
  108.         if(p != NULL)   
  109.         {   
  110.             PostPrint(p->lefttree);   
  111.             PostPrint(p->righttree);   
  112.             cout<< p->val<< ',';   
  113.         }   
  114.     }   
  115.       
  116.   
  117. protected:   
  118. private:   
  119.  NodeTree *root;   
  120. };   
  121. void main()   
  122. {   
  123.       BinaryTree tr;   
  124.       int a[10] = {6,5,7,2,1,3,8,4,10,9};   
  125.       tr.Creat(a ,10);   
  126.       tr.PreOrder();   
  127.       cout<<endl;   
  128.       tr.InOrder();   
  129.       cout<<endl;   
  130.       tr.PostOrder();   
  131.       cout<<endl;   
  132. }   

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值