博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
二叉查找树
阅读量:6527 次
发布时间:2019-06-24

本文共 7051 字,大约阅读时间需要 23 分钟。

1     using System;  2   3     public class BinarySearchTree  4     {  5         public int value;  6   7         public BinarySearchTree left = null;  8         public BinarySearchTree right = null;  9         public BinarySearchTree parent = null; 10         public BinarySearchTree root = null; 11  12         private bool _isRoot; 13         public bool isRoot 14         { 15             get { return _isRoot; } 16             set 17             { 18                 _isRoot = value; 19                 root = _isRoot ? this : null; 20             } 21         } 22  23         public BinarySearchTree(int value,BinarySearchTree parent,BinarySearchTree root) 24         { 25             this.value = value; 26             this.parent = parent; 27             this.root = root; 28         } 29         public BinarySearchTree(int value) : this(value, null, null) { } 30  31         ///  32         /// 增 33         ///  34         ///  35         /// 
36 public void InsertNode(int value) 37 { 38 if(value <= this.value) 39 { 40 if(left == null) 41 { 42 left = new BinarySearchTree(value,this,root); 43 return; 44 } 45 else if(left != null) 46 { 47 left.InsertNode(value); 48 return; 49 } 50 } 51 else if(value > this.value) 52 { 53 if(right == null) 54 { 55 right = new BinarySearchTree(value,this,root); 56 return; 57 } 58 else if(right != null) 59 { 60 right.InsertNode(value); 61 return; 62 } 63 } 64 } 65 66 /// 67 /// 删 68 /// 69 /// 70 ///
71 public void RemoveNode(int value) 72 { 73 BinarySearchTree beRemove = null; 74 try 75 { 76 beRemove = Find(value); 77 } 78 catch (Exception) 79 { 80 throw new Exception("被删除的数字不存在"); 81 } 82 83 if (beRemove.left == null && beRemove.right == null) 84 { 85 if (beRemove.parent.left == beRemove) 86 { 87 beRemove.parent.left = null; 88 } 89 else if (beRemove.parent.right == beRemove) 90 { 91 beRemove.parent.right = null; 92 } 93 } 94 else if(beRemove.left != null && beRemove.right == null) 95 { 96 if (beRemove.parent.left == beRemove) 97 { 98 beRemove.parent.left = beRemove.left; 99 }100 else if (beRemove.parent.right == beRemove)101 {102 beRemove.parent.right = beRemove.left;103 }104 }105 else if(beRemove.left == null && beRemove.right != null)106 {107 if (beRemove.parent.left == beRemove)108 {109 beRemove.parent.left = beRemove.right;110 }111 else if (beRemove.parent.right == beRemove)112 {113 beRemove.parent.right = beRemove.right;114 }115 }116 else if(beRemove.left != null && beRemove.right != null)117 {118 if (beRemove.parent.left == beRemove)119 {120 beRemove.parent.left = beRemove.right;121 }122 else if (beRemove.parent.right == beRemove)123 {124 beRemove.parent.right = beRemove.right;125 }126 127 beRemove.right.left = beRemove.left;128 }129 }130 131 /// 132 /// 改133 /// 134 /// 135 public void ChangeNoodTo(int newValue)136 {137 RemoveNode(value);138 root.InsertNode(newValue);139 }140 141 /// 142 /// 查143 /// 144 /// 145 ///
146 ///
147 public BinarySearchTree Find(int value)148 {149 if (value < this.value)150 {151 //return left == null ? -1 : left.Find(value);152 if(left == null)153 {154 throw new Exception("被搜索的数字不存在");155 }156 else157 {158 return left.Find(value);159 }160 }161 else if (value > this.value)162 {163 //return right == null ? -1 : right.Find(value);164 if(right == null)165 {166 throw new Exception("被搜索的数字不存在");167 }168 else169 {170 return right.Find(value);171 }172 }173 else if (value == this.value)174 {175 return this;176 }177 178 throw new Exception("被搜索的数字不存在");179 }180 181 /// 182 /// 输出这棵二叉搜索树183 /// 184 public void ShowTree()185 {186 Console.Write("(");187 Console.Write(this.value);188 if(left == null)189 {190 Console.Write("()");191 }192 else193 {194 left.ShowTree();195 }196 197 if(right == null)198 {199 Console.Write("()");200 }201 else202 {203 right.ShowTree();204 }205 206 Console.Write(")");207 }208 209 /// 210 /// 复写 ToString() 方法211 /// 212 ///
213 public override string ToString()214 {215 return value.ToString();216 }217 }
1     class Program 2     { 3  4         private static int[] value = new int[] { 50, 60, 70, 23, 51, 159, 25 }; 5  6         static void Main(string[] args) 7         { 8             BinarySearchTree rootNood = new BinarySearchTree(value[0]); 9             rootNood.isRoot = true;10 11             Console.WriteLine(rootNood.root == null);12 13             for (int i = 1; i < value.Length; i++)14             {15                 rootNood.InsertNode(value[i]);16             }17 18             rootNood.ShowTree();19             Console.WriteLine();20             21             rootNood.Find(23).ChangeNoodTo(24);22             rootNood.ShowTree();23             24 25             Console.ReadKey();26         }27     }

 

转载于:https://www.cnblogs.com/Yukisora/p/7865719.html

你可能感兴趣的文章
hello world
查看>>
易飞报表数据库PostgreSQL改成MSSQL方式
查看>>
MogileFS分布式文件系统
查看>>
我的友情链接
查看>>
我的友情链接
查看>>
智能服务架构 F5将定义L4-L7层SDN?
查看>>
m2eclipse插件地址
查看>>
我的友情链接
查看>>
2011年学习总结
查看>>
Xbox Live登录到Windows 8
查看>>
洛谷——P2878 [USACO07JAN]保护花朵Protecting the Flowers
查看>>
Linux5.8 Vncserver 配置图形界面
查看>>
ISA 2006三种客户端
查看>>
centos 7 架设svn服务器
查看>>
poj——1006 生理周期
查看>>
expect批量创建用户名实例
查看>>
背包问题(01背包,完全背包,多重背包)
查看>>
“病态”的大学
查看>>
codevs——3372 选学霸(背包)
查看>>
红帽安装oracle 10g系统环境配置脚本
查看>>