二叉树 C#
来源:互联网 发布:卖宠物的软件 编辑:程序博客网 时间:2024/06/06 01:11
- using System;
- using System.Text;
- namespace BinarySearchTree
- {
- class Node
- {
- public string info;
- public Node lchild;
- public Node rchild;
- public Node(string i, Node l, Node r)
- {
- info = i;
- lchild = l;
- rchild = r;
- }
- }
- class BinaryTree
- {
- public Node ROOT;
- int height;
- public BinaryTree()
- {
- ROOT = null;
- }
- public void insert(string element)
- {
- Node tmp, parent = null, currentNode = null;
- find(element, ref parent, ref currentNode);
- if (currentNode != null)
- {
- Console.WriteLine("Duplicates words not allowed");
- return;
- }
- else
- {
- tmp = new Node(element, null, null);
- if (parent == null)
- ROOT = tmp;
- else
- if (string.Compare(element, parent.info) < 0)
- parent.lchild = tmp;
- else
- parent.rchild = tmp;
- }
- }
- public void find(string element, ref Node parent, ref Node currentNode)
- {
- currentNode = ROOT;
- parent = null;
- while ((currentNode != null) && (currentNode.info != element))
- {
- parent = currentNode;
- if (string.Compare(element, currentNode.info) < 0)
- currentNode = currentNode.lchild;
- else
- currentNode = currentNode.rchild;
- }
- }
- public void delete(string element)
- {
- Node parent = null, currentNode = null;
- find(element,ref parent,ref currentNode);
- if (currentNode != null)
- {
- if (currentNode.lchild == null && currentNode.rchild == null)
- {
- if (parent == null)
- ROOT = null;
-
- else
- {
- if (parent.lchild == currentNode)
- parent.lchild = null;
- else
- parent.rchild = null;
-
- }
- }
- else if ((currentNode.lchild == null && currentNode.rchild != null)
- || (currentNode.lchild != null && currentNode.rchild == null))
- {
- if (parent == null)
- {
- if (currentNode.lchild!=null)
- ROOT = currentNode.lchild;
- else
- ROOT = currentNode.rchild;
-
- }
- else
- {
- if (parent.lchild == currentNode)
- if (currentNode.lchild != null)
- parent.lchild = currentNode.lchild;
- else
- parent.lchild = currentNode.rchild;
- else
- if (currentNode.lchild != null)
- parent.rchild = currentNode.lchild;
- else
- parent.rchild = currentNode.rchild;
-
- }
- }
- else if (currentNode.lchild != null && currentNode.rchild != null)
- {
- Node inorder_suc = currentNode.rchild;
- parent = currentNode;
- while (inorder_suc.lchild != null)
- {
- parent = inorder_suc;
- inorder_suc = inorder_suc.lchild;
- }
- currentNode.info = inorder_suc.info;
- if (inorder_suc.lchild == null && inorder_suc.rchild == null)
- {
- if (parent.lchild == inorder_suc)
- parent.lchild = null;
- else
- parent.rchild = null;
-
- }
- if (inorder_suc.lchild == null || inorder_suc.rchild == null)
- {
- if (parent.lchild == inorder_suc)
- if (inorder_suc.lchild != null)
- parent.lchild = inorder_suc.lchild;
- else
- parent.lchild = inorder_suc.rchild;
- else
- if (inorder_suc.lchild != null)
- parent.rchild = inorder_suc.lchild;
- else
- parent.rchild = inorder_suc.rchild;
-
- }
- }
- }
- }
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- public int getheight(Node ptr)
- {
- int lHeight = 0, rHeight = 0;
- if (ROOT == null)
- return 0;
- else
- {
- if (ptr != null)
- {
- lHeight = getheight(ptr.lchild);
- rHeight = getheight(ptr.rchild);
- return (lHeight > rHeight ? lHeight + 1 : rHeight + 1);
- }
- else
- return 0;
- }
- }
- public void printtree(Node ptr,int level)
- {
- if (ptr == null)
- return;
- else
- {
- if (ptr.rchild != null)
- printtree(ptr.rchild, level + 1);
- for (int i = 0; i < level; i++)
- Console.Write(" ");
- Console.WriteLine(ptr.info);
- if (ptr.lchild != null)
- printtree(ptr.lchild, level + 1);
- }
- }
- static void Main(string[] args)
- {
- BinaryTree b = new BinaryTree();
- while (true)
- {
- Console.Clear();
- b.height = b.getheight(b.ROOT);
- Console.WriteLine("the height of tree:{0}", b.height);
- Console.WriteLine("Print binary tree:");
- b.printtree(b.ROOT, 1);
- Console.WriteLine("/nMenu");
- Console.WriteLine("1. Implement insert operation");
- Console.WriteLine("2. Implement delete operation");
- Console.WriteLine("3. Exit");
- Console.Write("/nEnter your Choice:");
- char ch = Convert.ToChar(Console.ReadLine());
- switch (ch)
- {
- case '1':
- {
- Console.Write("Enter a word: ");
- string word = Console.ReadLine();
- b.insert(word);
- }
- break;
- case '2':
- {
- Console.Write("Enter a word: ");
- string word = Console.ReadLine();
- b.delete(word);
- }
- break;
- case '3':
- return;
- default:
- Console.WriteLine("Invalid option");
- break;
- }
- }
- }
- }
- }