标签:efi ica rop osi distinct file let bin com
A Binary Search Tree (BST) is recursively defined as a binary tree which has the following properties:
A Complete Binary Tree (CBT) is a tree that is completely filled, with the possible exception of the bottom level, which is filled from left to right.
Now given a sequence of distinct non-negative integer keys, a unique BST can be constructed if it is required that the tree must also be a CBT. You are supposed to output the level order traversal sequence of this BST.
Each input file contains one test case. For each case, the first line contains a positive integer N (≤1000). Then N distinct non-negative integer keys are given in the next line. All the numbers in a line are separated by a space and are no greater than 2000.
For each test case, print in one line the level order traversal sequence of the corresponding complete binary search tree. All the numbers in a line must be separated by a space, and there must be no extra space at the end of the line.
10
1 2 3 4 5 6 7 8 9 0
6 3 8 1 5 7 9 0 2 4
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); } } }
04-树6 Complete Binary Search Tree (30 分)
标签:efi ica rop osi distinct file let bin com
原文地址:https://www.cnblogs.com/interim/p/9734682.html