二叉排序树(北京邮电大学-2012)

转载 2016年08月30日 18:51:17

主类:

import bst.*;
public class BinarySearch
{
    public static void main(String[] args)
    {
        Scanner scan = new Scanner(System.in);
        List<BST> list = new ArrayList<BST>();
        BST<Integer,Integer> bst = new BST<Integer,Integer>();
        while(scan.hasNext())
        {
            int number = scan.nextInt();
            for(int i=0;i<number;i++)
            {
                bst.put(scan.nextInt(),number);
            }
            list.add(bst);
        }
        //bst.inOrderTraverse();
        for(int i=0;i<list.size();i++)
        {
            list.get(i).preOrderTraverse();
        }
    }

sort包中的BST类:

public class BST<Key extends Comparable<Key>,Value>
{
    private  Node root;
    public Key getRoot(){
        return root.getKey();
    }

    //BST插入算法
    public void put(Key key,Value val)
    {
        root = put(root,key,val);
    }
    public Node put(Node x,Key key,Value val)
    {
        if(x==null) return new Node(key,val,1);
        int cmp = key.compareTo(x.key);
        if(cmp<0)
            x.left = put(x.left,key,val);
        else if(cmp>0)
            x.right = put(x.right,key,val);
        else
            x.val = val;
        x.N =size(x.left)+size(x.right)+1;
        return x;
    }
    //BST查找算法
    public Value get(Key key)
    {
        Node x =root;
        while(x!=null)
        {
            int cmp = key.compareTo(x.key);
            if(cmp<0) x= x.left;
            else if(cmp>0) x = x.right;
            else return x.val;
        }
        return null;
    }
    //BST删除算法
    public void delete(Key key)
    {   
        root = delete(root,key);
    }
    public Node delete(Node x,Key key)
    {
        if(x==null) return null;
        int cmp = key.compareTo(x.key);
        if     (cmp < 0) x.left = delete(x.left,key);
        else if(cmp>0) x.right = delete(x.right,key);
        else
        {
            if(x.right == null) return x.left;
            if(x.left == null) return x.right;
            Node t = x;
            x = min(t.right);
            x.right = deleteMin(t.right);
            x.left = t.left;
        }
        x.N = size(x.left) + size(x.right) + 1;
        return x;
    }
    //BST最小键求法
    public Key min()
    {
        return min(root).key;
    }
    public Node min(Node x)
    {
        if(x.left == null) return x;
        return min(x.left);
    }
    //BST删除最小值算法
    public void deleteMin()
    {
        root = deleteMin(root);
    }
    private Node deleteMin(Node x)
    {
        if(x.left==null) return x.right;
        x.left = deleteMin(x.left);
        x.N = size(x.left) + size(x.right) + 1;
        return x;
    }
    //先根遍历算法,寻找父亲结点
    public void preOrderTraverse()
    {
         preOrderTraverse(root);
    }
    private void preOrderTraverse(Node x)
    {
        Node T = x;
        if(T==null) return;
        if(x.left!=null) x.left.setParent(x);
        if(x.right!=null) x.right.setParent(x);
        if(T==this.root) System.out.println("-1"+" ");
        else
            System.out.println(x.getParent().getKey()+" ");
        preOrderTraverse(x.left);
        preOrderTraverse(x.right);
    }
    //中序遍历算法
    public void inOrderTraverse()
    {
        inOrderTraverse(root);
    }
    private void inOrderTraverse(Node root)
    {
        Node T= root;
        if(T==null) return;
        inOrderTraverse(root.left);
        System.out.print(root.key+" ");
        inOrderTraverse(root.right);
    }
    //返回总结点个数
    public int size()
    {
        return size(root);
    }
    public int size(Node x)
    {
        if(x == null) return 0;
        else return x.N;
    }


    private class Node
    {
        private Key key;
        private Value val;
        private Node parent,left,right; 
        private int N;

        public Node(Key key,Value val,int N)
        {
            this.key = key;
            this.val = val;
            this.N = N;
        }
        public Node getParent()
        {
            return this.parent;
        }
        public void setParent(Node parent)
        {
            this.parent = parent;
        }
        public Key getKey()
        {
            return this.key;
        }
        public void setKey(Key key)
        {
            this.key = key;
        }



    }   
}

结果

网络信息安全对抗(北京邮电大学版)考点总结

你敢酱油党,一本书一天总结考点,就这样总结出来了!!!!     作业1:通过社会工程学手段尝试获知异性同学的a)生肖b)星座c)出生日期d)生辰八字(bonus: 2分),并详述你的社会工...
  • B452757715
  • B452757715
  • 2013年01月17日 20:26
  • 1993

2016北邮计算机考研复试上机题解

今年的题的难度很低。基本是09到现在最简单的一次了吧。 估计是由于15年的题目出的太难,全场没人过四题的缘故吧。。 下面是题目。 1.三元组 问题描述 给你一个长度为m的数组(数组...
  • opm777
  • opm777
  • 2016年03月26日 15:21
  • 3424

第九届 北邮程序设计大赛网络赛 部分题解

A B E 是签到题不在说了。 C. Mr.L's Journey 9TH BUPT Collegiate Programming Contest - Preliminary - 201...
  • u013649253
  • u013649253
  • 2015年04月14日 19:40
  • 683

2013北邮计算机院上机题

A 日期 Description 请你计算出第X年Y月Z日是第X年的第几天。其中,1月1日是第一天,1月2日是第二天,以此类推。 计算时请注意闰年的影响。对于非整百年,年数能整除4是闰年,否则...
  • u014285517
  • u014285517
  • 2017年03月17日 13:44
  • 282

2016-2017学年第二学期C++第三章(1)

C++ 上机课参考答案 本系列文章供北京邮电大学信通院及数媒学院「C++高级程序语言设计」上机课学生参考。 C 上机课参考答案 2016-2017学年第二学期C第三章1 VC实验31 闰年 VC实...
  • u013594828
  • u013594828
  • 2017年04月30日 20:11
  • 1257

Java学习经验(转自北邮人)

以过来人的身份谈谈我的感受。       首先如果只是ssh框架的话,是没有理由能拿到bat及这层次之上的offer的。因为这样的人太多了,而且框架的使用也比较简单,除非:对该框架非常了解,具备根据...
  • Ethan706
  • Ethan706
  • 2015年03月28日 10:31
  • 631

BUPT OJ 文件系统

孩子兄弟表示法的多叉树遍历  #include #include using namespace std; enum type{file,dir}; class node { public: st...
  • wcnmcsdn
  • wcnmcsdn
  • 2017年01月13日 17:28
  • 318

手把手教你做北邮操作系统小学期的实验一——Linux启动过程优化1

1.实验环境:硬件:Intel i5 操作系统:Windows 8.1 虚拟机:VMware Workstation 12.5.0 软件:Red Hat Enterprise Linux 9 (...
  • XiaoyYidiaodiao
  • XiaoyYidiaodiao
  • 2017年07月25日 17:20
  • 284

北京邮电大学课程Java实验一

**Project #1 A math learning tool** Develop a program that lets a first grader practice additions. ...
  • qq_33278292
  • qq_33278292
  • 2017年08月05日 14:23
  • 191

我的2012北京LAMP兄弟连

工作多年的我,一直很喜欢编程,各种语言都接触过,但都是一知半解.以前做电脑硬件销售的时候,做半职业的ASP开发.接触PHP大半年以来,一直很喜欢它,开始在网上找教程,这样,接触到了LAMP兄弟连的教程...
  • u011886490
  • u011886490
  • 2013年08月30日 14:29
  • 360
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:二叉排序树(北京邮电大学-2012)
举报原因:
原因补充:

(最多只允许输入30个字)