04-树6 Complete Binary Search Tree (30 分)
? 04-树6?Complete Binary Search Tree?(30 分)A Binary Search Tree (BST) is recursively defined as a binary tree which has the following properties: ?
? using System; using System.Collections.Generic; using System.Threading; using System.Threading.Tasks; using System.Diagnostics; using System.Net; using System.Text; using System.Xml; public class MyNode2 { public MyNode2(string s) { Value = int.Parse(s); } public MyNode2(int s) { Value = s; } public MyNode2 Left; public MyNode2 Right; public int Value; } class T { static void Main(string[] args) { //读取数量 int count = int.Parse(Console.ReadLine()); //读取数字行 var v = Console.ReadLine(); //数字切分放入list并排序 var a = v.Split(‘ ‘); List<int> listNum = new List<int>(); foreach (var item in a) { listNum.Add(int.Parse(item)); } listNum.Sort(); //以下内容是创建一个列表,把node放进去,为每个node创建左右子节点的同时,也把新创建的节点放入列表. //直到列表中node数量与给定的数字数量一致,结束 List<MyNode2> list = new List<MyNode2>(); list.Add(new MyNode2(-1)); int i = 0; while (list.Count < count) { list[i].Left = new MyNode2(-1); list.Add(list[i].Left); if (list.Count < count) { list[i].Right = new MyNode2(-1); list.Add(list[i].Right); } i++; } //为创建好的树,赋值,赋值从0开始 int x = 0; 赋值(list[0],ref x); StringBuilder sb = new StringBuilder(); //把node中的值,作为索引,输出listnum foreach (var item in list) { sb.Append(listNum[item.Value] + " "); } Console.WriteLine(sb.ToString().Trim()); return; } /// <summary> /// 以左中右的方式赋值,有子节点,则先遍历子节点 /// </summary> /// <param name="n"></param> /// <param name="v">ref,便于值累计</param> private static void 赋值(MyNode2 n,ref int v) { if (n.Left != null && n.Left.Value == -1) { 赋值(n.Left,ref v); } if (n.Value == -1) { n.Value = v++; } if (n.Right != null && n.Right.Value == -1) { 赋值(n.Right,ref v); } } } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |