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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

正在学习数据结构.不晓得怎么用JAVA实现二叉树,左字数小于右子数.

该贴已经同步到 jicz007的微博

6 个回复

倒序浏览
本帖最后由 梁锡伟 于 2011-10-13 18:31 编辑

单纯一个二叉树还比较好实现吧,二叉平衡树比较难,我看到二叉平衡树那里就卡住了,虽然思想能懂,但代码实现却一时半会搞不清如何写。所以我把数据结构放了一放,看别的= =

评分

参与人数 1技术分 +2 收起 理由
admin + 2

查看全部评分

回复 使用道具 举报
{:soso_e100:}谢谢

评分

参与人数 1技术分 +1 收起 理由
admin + 1

查看全部评分

回复 使用道具 举报
public class Tree {
        public static void main(String[] args) {
                TreeArray myarray = new TreeArray();
                BufferedReader buf = new BufferedReader(
                                new InputStreamReader(System.in));
                int data;
                try {
                        do {
                                System.out.print("请输入一个数字:");
                                data = Integer.parseInt(buf.readLine());
                                myarray.create(data);
                        } while (data != 0);
                } catch (NumberFormatException e) {
                        e.printStackTrace();
                } catch (IOException e) {
                        e.printStackTrace();
                }
               
                myarray.display();
        }
}

class TreeArray {

        private int maxSize = 16;

        private int[] Btree = new int[maxSize];

        public TreeArray() {
                for (int i = 0; i < maxSize; i++)
                        Btree[i] = 0;
        }

        public void create(int data) {

                int leverl = 1;
                while (Btree[leverl] != 0) {
                        if (data < Btree[leverl])
                                leverl = leverl * 2;
                        else
                                leverl = leverl * 2 + 1;
                }
                Btree[leverl] = data;
        }

        public void display() {
                for (int i = 1; i < maxSize; i++)
                        System.out.println("Node: " + i + "  " + Btree[i]);
        }
}
回复 使用道具 举报
它的遍历:public class Tree {

        public static void main(String[] args) {
                int data;
                DNTtree dtree = new DNTtree();
                BufferedReader buf = new BufferedReader(
                                new InputStreamReader(System.in));
                try {
                        System.out.print("请输入一个数值:");
                        data = Integer.parseInt(buf.readLine());
                        dtree.data[0] = data;
                        while (true) {
                                System.out.print("请输入一个数值:");
                                data = Integer.parseInt(buf.readLine());
                                if (data == 0)
                                        break;

                                dtree.create(data);
                        }
                } catch (NumberFormatException e) {
                        e.printStackTrace();
                } catch (IOException e) {
                        e.printStackTrace();
                }

                dtree.display(0);
        }
}

class DNTtree {
        int maxSize = 16;
        int[] data = new int[maxSize];
        int[] left = new int[maxSize];
        int[] right = new int[maxSize];

        public DNTtree() {
                for (int i = 0; i < maxSize; i++) {
                        data[i] = 0;
                        left[i] = -1;
                        right[i] = -1;
                }
        }
        public void create(int data) {
                int i;
                int position = 0;
                int level = 0;
                for (i = 0; this.data[i] != 0; i++);
                this.data[i] = data;
                while (true) {
                        if (data > this.data[level]) {
                                if (right[level] != -1)
                                        level = right[level];
                                else {
                                        position = -1;
                                        break;
                                }
                        } else {
                                if (left[level] != -1) {
                                        level = left[level];
                                } else {
                                        position = 1;
                                        break;
                                }
                        }
                }
                if (position == 1)
                        left[level] = i;
                else
                        right[level] = i;
        }
        public void display(int position) {
                if (position != -1) {
                        System.out.print("  " + data[position] + "  ");
                        display(left[position]);
                        display(right[position]);
                }
        }
}
回复 使用道具 举报
树(二叉树)在学xml遍历和解析的时候会有很大用处
回复 使用道具 举报
你找的什么资料学习数据结构的?
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马