C#构建二叉查找树
来源:互联网 发布:修改手机机型软件 编辑:程序博客网 时间:2024/06/07 02:33
二叉查找树的 C# 实现
- using System;
- using System.Collections.Generic;
- using System.Linq;
- using System.Text;
- namespace BinarySearchTree
- {
- publicclass Node
- {
- publicint Data;
- public Node Left;
- public Node Right;
- publicvoid DisplayNode()
- {
- Console.WriteLine(Data);
- }
- }
- publicclass BinarySearchTree
- {
- public Node root;
- public BinarySearchTree()
- {
- root =null;
- }
- publicvoid Insert(int i)
- {
- Node newNode =new Node();
- newNode.Data = i;
- if (root ==null)
- root = newNode;
- else
- {
- Node current = root;
- Node parent;
- while (true)
- {
- parent = current;
- if (i < current.Data)
- {
- current = current.Left;
- if (current ==null)
- {
- parent.Left = newNode;
- break;
- }
- }
- else
- {
- current = current.Right;
- if (current ==null)
- {
- parent.Right = newNode;
- break;
- }
- }
- }
- }
- }
- publicvoid InOrder(Node theRoot)
- {
- if (!(theRoot ==null))
- {
- InOrder(theRoot.Left);
- theRoot.DisplayNode();
- InOrder(theRoot.Right);
- }
- }
- publicint FindMax()
- {
- Node current = root;
- while (!(current.Right ==null))
- current = current.Right;
- return current.Data;
- }
- public Node Find(int key)
- {
- Node current = root;
- while (current.Data != key)
- {
- if (key < current.Data)
- current = current.Left;
- else
- current = current.Right;
- if (current ==null)
- returnnull;
- }
- return current;
- }
- publicbool Delete(int key)
- {
- Node current = root;
- Node parent = root;
- bool isLeftChild =true;
- while (current.Data != key)
- {
- parent = current;
- if (key < current.Data)
- {
- isLeftChild =true;
- current = current.Left;
- }
- else
- {
- isLeftChild = false;
- current = current.Right;
- }
- if (current ==null)
- returnfalse;
- }
- if ((current.Left ==null) && (current.Right == null))
- {
- if (current == root)
- root =null;
- elseif (isLeftChild)
- parent.Left =null;
- else
- parent.Right =null;
- }
- elseif (current.Right == null)
- if (current == root)
- root = current.Left;
- elseif (isLeftChild)
- parent.Left = current.Left;
- else
- parent.Right = current.Left;
- elseif (current.Left == null)
- if (current == root)
- root = current.Right;
- elseif (isLeftChild)
- parent.Left = current.Right;
- else
- parent.Right = current.Right;
- else
- {
- Node successor = GetSuccessor(current);
- if (current == root)
- root = successor;
- elseif (isLeftChild)
- parent.Left = successor;
- else
- parent.Right = successor;
- successor.Left = current.Left;
- }
- returntrue;
- }
- public Node GetSuccessor(Node delNode)
- {
- Node successorParent = delNode;
- Node successor = delNode;
- Node current = delNode.Right;
- while (current !=null)
- {
- successorParent = successor;
- successor = current;
- current = current.Left;
- }
- if (successor != delNode.Right)
- {
- successorParent.Left = successor.Right;
- successor.Right = delNode.Right;
- }
- return successor;
- }
- }
- }
- C#构建二叉查找树
- C#构建二叉查找树
- 二叉查找树构建
- Java 构建二叉查找树
- 二叉查找树的构建及遍历
- C#实现二叉查找树
- C#实现二叉查找树
- c#使用数组实现二叉查找树
- C# 二叉查找
- 查找树(二叉树)的构建以及分层遍历
- 简单二叉排序树/二叉查找树的构建插入删除操作
- 二叉搜索树的构建,遍历,查找,删除
- 查找--二叉查找树
- 如何构建二叉树
- 如何构建二叉树
- 构建二叉树实例
- 构建二叉树
- leetcode:构建二叉树
- HTML5-语音搜索框
- Java连接mysql数据库攻略
- .NET深入解析LINQ框架(二:LINQ优雅的前奏)
- 程序员的学习和积累 .
- Java乔晓松-js解析xml文件实现select二级联动
- C#构建二叉查找树
- .NET深入解析LINQ框架(三:LINQ优雅的前奏)
- git
- 让你的博客支持手机等移动终端浏览器的访问
- .NET深入解析LINQ框架(四:IQueryable、IQueryProvider接口详解)
- MySql常用命令总结-精华
- 冒泡排序,快速排序,插入排序以及二叉树查找的O级时间的比较
- .NET深入解析LINQ框架(五:IQueryable、IQueryProvider接口详解)
- 云计算在检验医学中的应用