二叉树

转载 2007年10月10日 09:07:00
*****************************************************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***************************************************************************

  

满二叉树、完全二叉树、平衡二叉树、哈夫曼树

最近做各大公司的笔试题,发现二叉树这块考得还是比较多的。 在笔试中,我看到了一道选择题,问哈夫曼树是不是满二叉树、是不是完全二叉树?当时哪记得清,什么二叉树的概念全忘光了。。 下面特地做了总结。 ...
  • Jaster_wisdom
  • Jaster_wisdom
  • 2016年05月21日 22:16
  • 3636

【算法导论】决策树是满二叉树吗?

今天看《算法导论》第三版dibaz
  • u010787773
  • u010787773
  • 2014年08月13日 11:33
  • 1576

C语言实现二叉树的基本操作

我在前面的博客中讲解了链表、栈和队列,这些数据结构其实都是线性表,并且给出了详细的实现。从今天开始,我们将要来学习树,树作为一种数据结构我们经常会用到,作为起步和基础,我们先来实现二叉树,也就是每个节...
  • CHENYUFENG1991
  • CHENYUFENG1991
  • 2016年03月11日 21:45
  • 13036

中序线索化二叉树的非递归算法

  • 2018年01月16日 10:22
  • 3KB
  • 下载

二叉树习题

  • 2018年01月16日 18:07
  • 123KB
  • 下载

c++实现二叉树的基本功能

  • 2017年11月05日 13:31
  • 1.77MB
  • 下载

基于C写的平衡二叉树

  • 2016年03月24日 16:18
  • 3KB
  • 下载

二叉树的Morris遍历

  • 2016年09月03日 18:23
  • 6.2MB
  • 下载

生成平衡二叉树

  • 2016年05月05日 21:31
  • 8KB
  • 下载

二叉树的非递归建立,前序、中序、后序遍历

  • 2017年07月17日 20:18
  • 5KB
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:二叉树
举报原因:
原因补充:

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