二叉排序树的实现(C#)

原创 2007年10月09日 13:31:00

 

 

搞了一天终于把这个homework搞定了。开心    ,下个星期有新的任务了。如果所有工作在星期五都可以告于一个段落,对所有职场人来说应该是一件很舒心的事吧。周末可以专注自己的其他事情,不用背着包袱过日子。Wish happy weekend!

曾经在网上搜到很多关于一些数据结构的代码,对过往的我的学业带来很大帮助,对现在工作中的我也很有启发。所以现在也把代码共享出来。希望也可以help someone in someday!

 

 
*****************************************************start****************************************************************************************using System;
using System.Collections;
using System.Globalization;
using System.Text;

namespace BTree
...{
    
    
public class TreeNode
    
...{
        
public object data;
        
public TreeNode leftNode;
        
public TreeNode rightNode;

        
public TreeNode(object item)
        
...{
            data 
= item;
            leftNode 
= rightNode = null;
        }


        
public void PrintNode()
        
...{
            
string result = "";
            
if (this == null)
                
return;
            result 
= "node.data is :" + this.data.ToString();
            Console.WriteLine(result);
        }

    }
 // end of TreeNode class

    
public class BTree
    
...{
        
public TreeNode root;

        
// create an empty BTree
        public BTree()
        
...{
            root 
= null;
        }


        
public void Destroy(TreeNode node)
        
...{
            
if (root != null)
            
...{
                Destroy(root.leftNode);
                Destroy(root.rightNode);
                root 
= null;
            }

        }


        
public void CreateBTree(int n)
        
...{
            
int i = 0;
            
for (; i < n;i++ )
            
...{
                
object temp = Console.ReadLine();
                insert(temp);
            }

        }


        
public void Inorder(TreeNode root)
        
...{
            
if (root == null)
                
return;
            Inorder(root.leftNode);
            root.PrintNode();
            Inorder(root.rightNode);
        }


        
public void Firstorder(TreeNode root)
        
...{
            
if (root == null)
                
return;
            root.PrintNode();
            Firstorder(root.leftNode);
            Firstorder(root.rightNode);
        }


        
public void Backorder(TreeNode root)
        
...{
            
if (root == null)
                
return;
            Backorder(root.leftNode);
            Backorder(root.rightNode);
            root.PrintNode();
        }



        
public TreeNode search(object item)
        
...{
            TreeNode temp
= null;
            
if (root.data.Equals(item))
                temp 
= root;
            
else
                temp 
= search(root, item);
            
return temp;
        }


        
public TreeNode search(TreeNode root, object item)
        
...{
            TreeNode tmp 
= null;
            
if (root.data.Equals(item))
            
...{
                tmp
= root;
                
return tmp;
            }

            
int result = Comparer.Default.Compare(root.data,item);
            
if (result > 0)
            
...{
                
if (root.leftNode != null)
                    tmp 
= search(root.leftNode, item);
            }

            
else
            
...{
                
if (root.rightNode != null)
                    tmp 
= search(root.rightNode, item);
            }

            
return tmp;
        }


        
public void insert(object item)
        
...{
            
if (root == null)
            
...{
                root 
= new TreeNode(item);
            }

            
else
                insert(root, item);
        }


        
public void insert(TreeNode node, object item)
        
...{
            
int result = Comparer.Default.Compare(node.data, item);
            
if ( result >= 0)
            
...{
                
if (node.leftNode == null)
                
...{
                    TreeNode temp 
= new TreeNode(item);
                    node.leftNode 
= temp;
                }

                
else
                    insert(node.leftNode, item);
            }

            
else
            
...{
                
if (node.rightNode == null)
                
...{
                    TreeNode temp 
= new TreeNode(item);
                    node.rightNode 
= temp;
                }

                
else
                    insert(node.rightNode, item);
            }

        }
 //end of insert


        
public TreeNode MinRight(TreeNode node)
        
...{
            
if (node.leftNode == null)
                
return node;
            
else
                
return MinRight(node.leftNode);
        }


        
public TreeNode searchParent(TreeNode head,TreeNode p)
        
...{
            
if(head.leftNode == p || head.rightNode == p || head == null)
                
return head;
            
int result = Comparer.Default.Compare(p.data, head.data);
            
if (result <= 0)
                
return searchParent(head.leftNode, p);
            
else
                
return searchParent(head.rightNode, p);
        }


        
public void delete(object item)
        
...{
            TreeNode p 
= null;

            p 
= search(root, item);

            
if (p == null// p is not the item of the BTree
            ...{
                Console.WriteLine(
"don't find the item");
                
return;
            }


            
if (p == root) // p is the root node
            ...{
                
if (root.leftNode != null || root.rightNode != null)
                
...{
                    Console.WriteLine(
"BTree root node can't be delete yet");
                    
return;
                }

                
else
                
...{
                    root 
= null;
                    Console.WriteLine(
"BTree root node has been deleted");
                    
return;
                }

            }


            
else // p is not the root node
            ...{
                TreeNode parent 
= null;
                parent 
= searchParent(root, p);
                
if (p.leftNode == null && p.rightNode == null// p is leaf node
                ...{
                    
if (parent.leftNode == p)
                        parent.leftNode 
= null;
                    
else
                        parent.rightNode 
= null;
                }

                
else //p is not leaf node
                ...{
                    
if (p.rightNode == null// p has no right child node
                    ...{
                        
if (parent.leftNode == p)
                            parent.leftNode 
= p.leftNode;
                        
else
                            parent.rightNode 
= p.leftNode;
                    }

                    
if (p.leftNode == null// p has no left child node
                    ...{
                        
if (p.leftNode == p)
                            parent.leftNode 
= p.rightNode;
                        
else
                            parent.rightNode 
= p.rightNode;
                    }

                    
else if (p.leftNode !=null && p.rightNode !=null// p has both left node and right node
                    ...{
                        TreeNode rightMinSon, rightMinParent;
                        rightMinSon 
= MinRight(p.rightNode);
                        rightMinParent 
= searchParent(p.rightNode, rightMinSon);

                        rightMinParent.leftNode 
= rightMinSon.rightNode;

                        
if (p.rightNode == rightMinSon)
                        
...{
                            p.rightNode 
= rightMinSon.rightNode;
                        }

                        p.data 
= rightMinSon.data;

                    }


                }

            }

        }
 // end of delete

    }
 // end of BTree class

 

    
public class MainEntry
    
...{
        
public static void Main()
        
...{
            BTree tree 
= new BTree();

            Console.Write(
" *********************************************** ");
            Console.WriteLine(
"Create BTree");
            Console.WriteLine(
"please input the numbers of the BTree which you want to create");
            
int n = Convert.ToInt32(Console.ReadLine());
            Console.WriteLine(
"please input the items:");
            tree.CreateBTree(n);
            Console.WriteLine(
"***********************************************");

            Console.Write(
" *********************************************** ");
            Console.WriteLine(
"BTree first search");
            tree.Firstorder(tree.root);
            Console.WriteLine(
"***********************************************");

            Console.Write(
" *********************************************** ");
            Console.WriteLine(
"BTree inorder search");
            tree.Inorder(tree.root);
            Console.WriteLine(
"***********************************************");

            Console.Write(
" *********************************************** ");
            Console.WriteLine(
"BTree backorder search");
            tree.Backorder(tree.root);
            Console.WriteLine(
"***********************************************");

            Console.Write(
" *********************************************** ");
            Console.WriteLine(
"search item in BTree");
            Console.WriteLine(
"please input the item you want to search");
            
            
object obj = Console.ReadLine();
            TreeNode result 
= tree.search(obj);
            
if (result != null)
                Console.WriteLine(
"has find the item {0}", result.data);
            
else
                Console.WriteLine(
"has not find the item {0}", obj);
             
#if DEBUG
            
for (int i = 1; i < n+1; i++)
            
...{
               
object item = null;
               TreeNode temp
= null;
               item 
= Console.ReadLine();
               temp 
= tree.search(item);
                
if (temp != null)
                    Console.WriteLine(
"has find the item {0}", temp.data);
                
else
                    Console.WriteLine(
"has not find the item {0}", item);
            }

#endif          
            Console.WriteLine(
"***********************************************");

            Console.Write(
" *********************************************** ");
            Console.WriteLine(
"insert item in BTree");
            Console.WriteLine(
"please input the item you want to insert");
            obj 
= Console.ReadLine();
            tree.insert(obj);
            tree.Firstorder(tree.root);
            Console.WriteLine(
"***********************************************");

       
            Console.Write(
" *********************************************** ");
            Console.WriteLine(
"delete item in BTree");
            Console.WriteLine(
"please input the item you want to delete");
            
object obj1 = Console.ReadLine();
            tree.delete(obj1);
            
if (tree.root != null)
                tree.Firstorder(tree.root);
            
else
                Console.WriteLine(
"the BTree is empty");
#if DEBUG
            
object test = null;
            
for (int i = 1; i <= n+2; i++)
            
...{
                test 
= Console.ReadLine();
                tree.delete(test);
                
if (tree.root != null)
                        tree.Firstorder(tree.root);
                
else
                        Console.WriteLine(
"the BTree is empty");
            }

#endif

           Console.WriteLine(
"***********************************************");
           Console.ReadKey();         

        }

    }
    
}
 // end of namespace BTree

*************************************************************end***************************************************************************

 

上面#if DEBUG是编译开关,而且里面的循环纯粹是为了测试上面写的BTree的相关操作是否正确。如果大家要用的话,只需把BTreeClass拷贝过去就可以直接利用了。^_^

c#二叉排序树实现

主要是二叉排序树的构建和显示 using System; using System.Collections; using System.Text; public class Node { p...
  • jialeheyeshu
  • jialeheyeshu
  • 2016年12月02日 10:13
  • 636

【数据结构与算法】二叉排序树C实现(含完整源码)

二叉排序树(Binary Sort Tree,简称BST),又称二叉查找树,是红黑树、AVL树等的基础。它或是一棵空树,或者是具有下列性质的一棵二叉树: 1、若它的左子树不空,则左子树上所有节点...
  • mmc_maodun
  • mmc_maodun
  • 2014年02月25日 00:02
  • 12166

二叉排序树C语言实现一

二叉排序树插入,删除,查找等各种操作手工模拟并用C语言实现。
  • xiaowang627
  • xiaowang627
  • 2016年05月06日 16:29
  • 2309

Java实现二叉排序树

定义: 二叉排序树或者是一棵空树,或者是具有下列性质的二叉树: (1)若左子树不空,则左子树上所有结点的值均小于它的根结点的值; (2)若右子树不空,则右子树上所有结点的值均大于...
  • lc0817
  • lc0817
  • 2015年09月02日 18:50
  • 1713

C语言二叉排序树的实现

二叉排序树是一种排序和查找都很有用的特殊二叉树。 二叉树的性质: 1.      若它的左子树不为空,则左子树上所有结点的值均小于它的根节点的值。 2.      若它的右子树不为空,则右子树上...
  • ZGUIZ
  • ZGUIZ
  • 2017年01月22日 11:16
  • 608

二叉排序树的创建(结点的插入,删除等操作)

二叉排序树的理论看课本 代码如下: BSTree.h struct BSTreeNode; typedef struct BSTreeNode *ptrtreenode; void Make...
  • jw903
  • jw903
  • 2014年05月05日 22:49
  • 1282

二叉排序树C++实现

学习了算法导论12章关于二叉排序树的内容,自己利用C++实现了二叉排序树的封装。(删除暂时没有实现,后续再补吧) 有什么不足之处希望不吝赐教!头文件,二叉排序树类的定义(注释比较清楚,就不再赘述了)...
  • LHJ884
  • LHJ884
  • 2015年07月28日 20:20
  • 1543

二叉排序树代码实现

参照《大话数据结构》 313 ~328页 #include #include #include #include using namespace std; /* 二叉树存储结构定...
  • u010889616
  • u010889616
  • 2015年11月03日 20:08
  • 568

C语言实现二叉排序树

#include #include #include /* 定义结构体 */ typedef int TypeData; typedef struct stBiTreeNode { T...
  • u010889616
  • u010889616
  • 2015年08月25日 21:57
  • 940

顺序查找 折半查找 二叉排序树

1.顺序查找,折半查找,二叉排序树操作定义 SeqSearch.h #include #define ARRAYLEN 8 int source[]={69, 65, 90, 37, 92, 6...
  • niuyisheng
  • niuyisheng
  • 2013年07月18日 21:13
  • 1531
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:二叉排序树的实现(C#)
举报原因:
原因补充:

(最多只允许输入30个字)