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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 陈志强 中级黑马   /  2013-3-17 20:10  /  1182 人查看  /  5 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 陈志强 于 2013-3-18 15:09 编辑

什么是二叉树啊?TreeSet是怎么实现比较的?有什么样的排序方式啊?这些方式有什么区别?比较器是怎么实现的?还望大神解析!谢谢

点评

再次提醒: 如果问题未解决,请继续追问回复者,如果问题已经解决,请将分类改为“已解决”,否则将扣除技术分,谢谢  发表于 2013-3-18 12:13
如果问题未解决,请继续追问回复者,如果问题已经解决,请将分类改为“已解决”,谢谢  发表于 2013-3-18 06:13

评分

参与人数 1技术分 +1 收起 理由
贾文泽 + 1

查看全部评分

5 个回复

倒序浏览
二叉树是每个结点最多有两个子树的有序树。通常子树的根被称作“左子树”(left subtree)和“右子树”(right subtree)。二叉树常被用作二叉查找树和二叉堆。
(1)完全二叉树——只有最下面的两层结点度小于2,并且最下面一层的结点都集中在该层最左边的若干位置的二叉树;
(2)满二叉树——除了叶结点外每一个结点都有左右子女且叶结点都处在最底层的二叉树。
结点:
在是数据结构中,用来描述“树”型结构的名词。
这种结构像一根倒着的树。
每片树叶都长在一个结点上,这个结点就叫做这个叶子的父结点,这个叶子叫做你结点的子结点,也叫这棵树的叶结点,它再没有子结点了。而叶子的父结点一定还会有上面的父结点,这样一级一级上去就到了根结点,它就像是树的根,它上面再没有“叉儿”了

TreeSet是一个有序集合,里面的元素若要实现自然排序就需要实现Comparable接口,或者你也可以自定义一个Comparator实现自己的比较方式。TreeSet底层无非是通过比较元素实现排序,那也是调用Comparable或者Comparator来实现的。至于排序算法那就是更底层的东西了,java不关心这些

评分

参与人数 1技术分 +1 收起 理由
贾文泽 + 1

查看全部评分

回复 使用道具 举报
   二叉树定义:
        通俗点说,就是只有最多只有两颗子树,且分为左、右子树。

   排序:首先分为两种:
     1)自然排序,也就是 比如整形数据int ,这时TreeSet会自动的根据数据的大小来排序,这时JVM自动实现的,如
   
package com;

import java.util.*;

public class TreeSetTest {

        /**
         * @param args
         */
        public static void main(String[] args) {
                TreeSet ts=new TreeSet();
                ts.add(5);
                ts.add(10);
                ts.add(1);
                ts.add(7);
                ts.add(8);
               
                System.out.println(ts);
               

        }

}

输出结果为:[1, 5, 7, 8, 10]

但是,若是我们自定义的类,如person类,JVM就不会自动排序了,因为,JVM不知道根据什么排序,这时我们就可以分两种方式来实现排序了:1)实现Comparator接口 ,构造比较器  2)在定义的类中实现Comparable接口,并重写compareTo()方法,compareTo方法中定义排序的方式。

比较器的实现:

package com_1;

import java.util.*;

public class TreeSetDome {

        /**
         * @param args
         */
        public static void main(String[] args) {
                TreeSet t=new TreeSet(new MyCompator());
                t.add(new Person(1,"wq1"));
                t.add(new Person(2,"wq2"));
                t.add(new Person(3,"wq3"));
                t.add(new Person(0,"wq0"));
               
                Iterator it=t.iterator();
                while(it.hasNext()){
                        Person p=(Person)it.next();
                        System.out.println(p);
                }
        }
       
       

}
//比较器的实现
class MyCompator implements Comparator{

        @Override
        public int compare(Object o1, Object o2) {
                  Person p1=(Person)o1;
                  Person p2=(Person)o2;
                  return p1.getAge()-p2.getAge();       
        }
       
}

class Person{
        private String name;
        private int age;
       
        public Person(int age,String name){
                this.age=age;
                this.name=name;
        }
       
        public int getAge(){
                return this.age;
        }
       
        public String getName(){
                return this.name;
        }
       
        public String toString(){
                return this.age+"---->"+this.name;
        }
       

}
  楼主,这是我看毕老师的课,自己写的,上面就是比较器的实现。
   希望这个答案能帮助你!
  

评分

参与人数 1技术分 +1 收起 理由
贾文泽 + 1

查看全部评分

回复 使用道具 举报

RE: 关于二叉树

♂超√/kun 发表于 2013-3-17 20:23
二叉树是每个结点最多有两个子树的有序树。通常子树的根被称作“左子树”(left subtree)和“右子树”(ri ...

谢谢,原来二叉树是这样
回复 使用道具 举报

RE: 关于二叉树

王_强 发表于 2013-3-17 21:09
二叉树定义:
        通俗点说,就是只有最多只有两颗子树,且分为左、右子树。

自定义类,实现接口,构造比较器,将比较器作为参数传递给集合进行排序,使得集合按照指定的比较方法进行排序,嗯嗯,的确是好方法,谢谢
回复 使用道具 举报
没事的,大家相互学习!
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马