A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

本帖最后由 java冬冬 于 2013-4-9 15:44 编辑

先感谢论坛的朋友们教我做代码呀,这个问题前天在发过,可能问的时候写的不明确,没有得到满意的答案,现在我改的更详细了些,还希望黑马同志们帮我解决呀

  1. /**
  2. 分析比较器的排序原理:
  3. 二叉树排序算法,中序遍历
  4. 二叉树排序的基本原理:第一个内容作为根节点,后面值小,则放在跟节点左子树,若大,右子树
  5. 中序遍历:左子树——根节点——右子树
  6. Integer类本身已经实现了Comparable接口

  7. 要求:基于Comparable接口实现的二叉树操作
  8.     对8、3、3、10、9、1、5、5进行排序????
  9. 思路:
  10. 1.首先,定义一个二叉树的类BinaryTree{}
  11. 2.在类中声明一个节点类(内部类)
  12. 3.节点类中声明节点的具体内容(Comparable数据)、节点的左子树、节点的右子树
  13.   取得新元素的值public Node(Comparable data){}
  14. 4.声明根元素root,在Node类外
  15. 5.定义一个传入新数的方法add(Comparable data){}
  16. 6.每传入一个新数就声明一个根节点
  17.   判断传入的数(if语句)是否是第一个数,若是则设置成根元素,
  18.   若不是,则确定是放在左子树还是右子树(调用addNode()方法)
  19.   
  20. 7.Node类内定义一个将值加入节点的的方法public void addNode(Node newNode){},
  21.   在此方法中确定加入的值是放在左子树还是右子树(if语句)
  22. 8.输出节点的方法print(){},调用9
  23. 9.Node类内,采用中序遍历方法输出,左子树——根节点——右子树
  24. 10.主函数:
  25.    声明一个二叉树对象:bt
  26.    加入N个元素(其中有重复的元素)
  27.    打印输出
  28. 注:谁有数据谁具有方法,内部类Node中有加入的数放入节点的方法public void addNode(Node newNode){}
  29.      和节点输出的方法printNode(){}
  30. */
  31. class BinaryTree         //首先,定义一个二叉树的类BinaryTree{}
  32. {
  33. class Node          //在类中声明一个节点类(内部类)
  34. {
  35.   private Comparable data;     //节点类中声明节点的具体内容(Comparable数据)、
  36.   private Node left;       //节点的左子树、
  37.   private Node right;       //节点的右子树
  38.   public Node(Comparable data){    //取得新元素的值public Node(Comparable data){}
  39.    this.data=data;
  40.   }
  41.   public void addNode(Node newNode){ //Node类内定义一个将值加入节点的的方法public void addNode(Node newNode){},
  42.    if (newNode.data.compareTo(this.data)<0)  //比较加入的数与当前节点的数的大小,
  43.    {  
  44.     if (this.left==null)      //若小且没有左子树,则放在左子树
  45.     {
  46.      this.left=newNode;
  47.     }else{
  48.      this.left.addNode(newNode);             //否则,以左子树为节点继续向下判断
  49.     }
  50.    }
  51.    if (newNode.data.compareTo(this.data)>=0)  //比较加入的数与当前节点的数的大小,
  52.    {  
  53.     if (this.right==null)      //若小且没有右子树,则放在右子树
  54.     {
  55.      this.right=newNode;
  56.     }else{
  57.      this.right.addNode(newNode);             //否则,以右子树为节点继续向下判断
  58.     }
  59.    }
  60.   }
  61.   public void printNode(){       //Node类内,采用中序遍历方法输出,左子树——根节点——右子树
  62.    if (this.left!=null)
  63.    {
  64.     this.left.printNode();
  65.    }
  66.    System.out.print(this.data+"\t");
  67.    if (this.right!=null)
  68.    {
  69.     this.right.printNode();
  70.    }
  71.   }
  72.   
  73. }
  74. private Node root;         //声明根元素root,在Node类外
  75. public void add(Comparable data){     //定义一个传入新数的方法add(Comparable data){}
  76.   Node newNode=new Node(data);      //每传入一个新数就声明一个根节点
  77.   //newNode.data=data;        
  78.   if(root==null){
  79.   root=newNode;         // 判断传入的数(if语句)是否是第一个数,若是则设置成根元素,
  80.   }else{
  81.    root.addNode(newNode);      //若不是,则确定是放在左子树还是右子树(调用addNode()方法)
  82.   }
  83. }
  84. public void print(){        
  85.   this.root.printNode();       //输出节点的方法print(){},调用9
  86. }
  87. }
  88. public class ComparableDemo02
  89. {
  90. public static void main(String[] args)
  91. {
  92.   BinaryTree bt=new BinaryTree();    //声明一个二叉树对象:bt
  93.   bt.add(8);
  94.   bt.add(3);
  95.   bt.add(3);          //加入N个元素(其中有重复的元素)
  96.   bt.add(10);
  97.   bt.add(9);
  98.   bt.add(1);
  99.   bt.add(5);
  100.   bt.add(5);
  101.   System.out.println("排序之后的结果");
  102.   bt.print();
  103.   
  104. }
  105. }
复制代码
编译后:

360截图20130409130942828.jpg (11.93 KB, 下载次数: 12)

360截图20130409130942828.jpg

5 个回复

正序浏览
这种问题最伤心了,让人如何一点一点地看!
回复 使用道具 举报
这个就是泛型定义的问题
集合在1.5之后,如果你不添加泛型都会有这个提示的
这个不是错误,就是一个提示
回复 使用道具 举报
这个提示是在JDK1.5版本后泛型出现后,对不安全的语句进行的提示,就是说Comparable和Comparator都是泛型类,只要进行了泛型声明就没问题了。
将所有Cmparable接口的泛型都定义为Integer:Comparable<Integer>,
再将(Integer)this.data) < 0和(Integer)this.data) >= 0强转就OK了。
回复 使用道具 举报
错误在90行 :类ComparableDemo02是公共的 ,应在名为ComparableDemo02.java的文件中声明
public class  ComparableDemo02所以文件名必须和类名一致   

QQ截图20130409133012.png (3.51 KB, 下载次数: 25)

QQ截图20130409133012.png
回复 使用道具 举报
泛型安全问题吧,你用了 Comparable没指定泛型
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马