static void Main(string[] args) { Console.Title = "查询具有指定成绩的学生信息"; StudentList students = new StudentList(20); Console.WriteLine("学生成绩单如下:"); for (int i = 0; i < 20; i++) { Console.Write(students[i].Result + "\t"); if ((i + 1) % 5 == 0) Console.WriteLine(); } BTreeNode root = new BTreeNode(students[0]); //创建二叉排序树根结点 for (int i = 1; i < 20; i++) { CreateBinarySortingTree(root, students[i]); //根据学生成绩创建二叉排序树 } int result; //在二叉排序树上的查找指定成绩学生信息 do { Console.WriteLine("请输入要查询的学生的成绩:"); if (!int.TryParse(Console.ReadLine(), out result)) result = -1; BTreeNode node = root; bool successful = false; while (node != null) { if (result > node.Student.Result) node = node.RightChild;//查找右子树 else if (result < node.Student.Result) node = node.LeftChild;//查找左子树 else//查找成功 { Console.WriteLine("学号:{0}\t姓名:{1}\t年级:{2}", node.Student.Number, node.Student.Name, node.Student.Grade); successful = true; break; } } if (!successful) Console.WriteLine("无此学生信息!");//查找失败 } while (result != -1); Console.ReadLine(); }
//创建二叉排序树 static void CreateBinarySortingTree(BTreeNode node, Student student) { if (student.Result < node.Student.Result) //如果成绩比根结点小 { if (node.LeftChild == null) //如果左子树为空 //创建左孩子结点,并将学生信息添加到该孩子结点中 node.LeftChild = new BTreeNode(student); else //如果左子树不为空 CreateBinarySortingTree(node.LeftChild, student);//将学生信息添加到左子树中 } else if (student.Result > node.Student.Result) //如果成绩比根结点大 { if (node.RightChild == null) //如果右子树为空 //创建右孩子结点,并将学生信息添加到该孩子结点中 node.RightChild = new BTreeNode(student); else //如果右子树不为空 CreateBinarySortingTree(node.RightChild, student);//将学生信息添加到右子树中 } }