二叉搜索树(未完待续)

作者:disappearedgod
时间:2014-4-24

前记

本想在查找 与 树中完成有关树的介绍,但是由于树的东西实在太多,而面试笔试也是一个重点,所以分出来写了个"数据结构-树",后来由于那篇单独介绍树的博客也太长,就暂时分开了成为了几个博客,在相关链接中能看到。
July 博客是被大家所知的,其原因是因为面试笔试题比较多。尽管他写的思路比较好,但是还有有很难以阅读的问题,也许是他把好阅读的方式放在了线下。
本文还是主要根据教材来进行书写《数据结构与算法》 Adam Drozdek的C++版本,代码还是用Java的较好一些。


正文

3. 二叉搜索树


3.1 介绍


3.2 定义


3.3 性质


3.4 实现


3.4.1 二叉树的实现


#include
     
     
      
      
#include
      
      
       
       
using namespace std;

#ifndef BINARY_SEARCH_TREE
#DEFINE BINARY_SEARCH_TREE

template
       
       
        
        
class Stack : public stack
        
        
         
         {
    public:
        T pop(){
            T tmp = top();
            stack
         
         
           ::pop(); return tmp; } }; template 
          
            class Queue:public queue 
           
             { public: T dequeue(){ T tmp =front(); queue 
            
              :: pop(); return tmp; } void enqueue(const T& el){ push(el); } }; template 
             
               class BSTNode{ public: BSTNode(){ left = right = 0; } BSTNode(const T& el, BSTNode *l=0,BSTNode *r = 0){ Key = el; left = l; right = r; } T key; BSTNode *left,*right; }; template 
              
                class BST{ public: BST(){ root = 0; } ~BST(){ clear(); } void clear(){ clear(root); root=0; } bool isEmpty() const{ return root ==0; } void preorder(){ preorder(root); } void inorder(){ inorder(root); } void postorder(){ postorder(root); } T* search(const T& el)const{ return search(root,el); } void breadthFirst(); void iterativePreorder(); void iterativeInorder(); void iterativePostorder(); void MorrisInorder(); void insert(const T&); void deleteByMerging(BSTNode 
               
                 *&); void findAndDeleteByMerging(const T&); void deleteByCopying(BSTNode 
                
                  *&); void balance(*T,int,int); protected: BSTNode 
                 
                   * root; void clear(BSTNode 
                  
                    *); T* search(BSTNode 
                   
                     *, const T&)const; void preorder(BSTNode 
                    
                      *); void inorder(BSTNode 
                     
                       *); void postorder(BSTNode 
                      
                        *); virtual void visit(BSTNode 
                       
                         *p){ cout<< p->key <<' '; } } #endif 
                        
                       
                      
                     
                    
                   
                  
                 
                
               
              
             
            
           
         
        
        
       
       
      
      
     
     

3.5 应用

{10,5,15,#,#,6,20} 不是二叉查找树。

3.6 评价


相关链接


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值