数据结构学习(1):搜索二叉树

using System;
using System.IO;

namespace BinaryTreeSearch
{
    
/// <summary>
    
/// Class1 的摘要说明。
    
/// </summary>

    class BinaryTreeSearch
    
{
        
/// <summary>
        
/// 应用程序的主入口点。
        
/// </summary>

        [STAThread]
        
static void Main(string[] args)
        
{
            
//
            
// TODO: 在此处添加代码以启动应用程序
            
//
        }

        
public void init()
        
{
            
//构造一个空的二叉搜索树开始
            BinarySearchTree T=new BinarySearchTree();//T初始为空

        }

    }

    
class BinarySearchTree
    
{
        
//BinarySearchTree中有一个存储指向二叉搜索树根结点指针(或存有证明为空树
        
//的null)的私有数据域
        private TreeNode rootNode;
        
//BinarySearchTree的各种方法
        
//Insert方法所用的辅助方法
        private TreeNode insertKey(TreeNode T,ComparisonKey K)
        
{
            
if(T==null)
            
{
                TreeNode N
=new TreeNode();//构建一个新的TreeNode
                N.key=K;
                
return N;
            }

            
else
            
{
                
if(K.compareTo(T.key)<0)
                
{
                    T.llink
=insertKey(T.llink,K);
                    
return T;
                }

                
else
                
{
                    T.rlink
=insertKey(T.rlink,K);
                    
return T;
                }

            }

        }
//end insertKey


        
void insert(string K)
        
{
            rootNode
=insertKey(rootNode,new StringKey(K));
        }
//end insert

        TreeNode find(ComparisonKey K)
        
{
            TreeNode T
=rootNode;
            
int result;

            
while(T!=null)
            
{
                
if((result=K.compareTo(T.key))<0)
                
{
                    T
=T.llink;
                }

                
else if(result==0)
                
{
                    
return T;
                }

                
else
                
{
                    T
=T.rlink;
                }
//end if
            }

            
return T;//如果搜索失败 返回null
        }


        TreeNode find(String K)
        
{
            
return find(new StringKey(K));
        }

    }

    
class TreeNode
    
{
        ComparisonKey key;
        TreeNode llink;
        TreeNode rlink;
    }

    
public interface ComparisonKey
    
{
        
//        如果K1和K2均为ComparisonKey,那么K1.compareTo(k2)就会有三个值0,1,-1,
        
//        就是K1==K2,K1>K2,K1<K2顺序是compareTo方法定义的优先级别顺序
        int compareTo(ComparisonKey value);
        
//将ComparisonKey转换成可以打印的字符串
        string toOurString();
    }


    
public class PQItem:ComparisonKey
    
{

        
private int key;//key数据包括给出元素优先级别的整数关键字
        public PQItem(int value)
        
{
            key
=value;
        }

        
ComparisonKey 成员

    }


}

posted @ 2006-12-14 18:58  大天使泰瑞尔  阅读(562)  评论(0编辑  收藏  举报