数据结构与算法(C#实现)系列---二叉树

来源:互联网 发布:淘宝网店开 编辑:程序博客网 时间:2024/06/14 03:55
using System;
using System.Collections;
 
namespace DataStructure
{
     ///<summary>
     /// BinaryTree 的摘要说明。
     ///</summary>
     public class BinaryTree:NaryTree
     {
         //构造二叉空树
         public BinaryTree():base(2)
         {
              //
              // TODO: 在此处添加构造函数逻辑
              //
         }
         public BinaryTree(object _obj):base(2,_obj)
         {}
//------------------------------------------------------------------
         protected override object GetEmptyInstance(uint _degree)
         {    return new BinaryTree(_degree); }
//------------------------------------------------------------------
         //重写深度遍历
         public override void DepthFirstTraversal(IPrePostVisitor _vis)
         {
              if ( !IsEmpty() )
              {
                   _vis.PreVisit(this.Key);
                   this[0].DepthFirstTraversal(_vis);
                   _vis.Visit(this.Key);
                   this[1].DepthFirstTraversal(_vis);
                   _vis.PostVisit(this.Key);
                  
                  
              }
         }
 
    
         //二叉树大小的比较
         //先比较关键字,如果相等,再比较左子树,如果再相等,则比较右子树----如此递归
         #region IComparable 成员
 
         public override int CompareTo(object obj)
         {
              // TODO: 添加 BinaryTree.CompareTo 实现
              //因为Comare()中已经进行了类型断定,故不会出现转型错误
              BinaryTree tmpTree=(BinaryTree)obj;
             
              if( this.IsEmpty() )
                   return tmpTree.IsEmpty()?0:-1;
              if( tmpTree.IsEmpty() )
                   return 1;
 
              int result=Comparer.Default.Compare(this,tmpTree);
              if(result==0)
                   result=this[0].CompareTo(tmpTree[0]);
              if(result==0)
                   result=this[1].CompareTo(tmpTree[1]);
 
             
              return result;
         }
 
         #endregion
     }
}