黑马程序员技术交流社区

标题: 正在学习数据结构.不晓得怎么用JAVA实现二叉树 [打印本页]

作者: jicz007    时间: 2011-10-13 09:40
标题: 正在学习数据结构.不晓得怎么用JAVA实现二叉树
正在学习数据结构.不晓得怎么用JAVA实现二叉树,左字数小于右子数.

该贴已经同步到 jicz007的微博
作者: 梁锡伟    时间: 2011-10-13 18:30
本帖最后由 梁锡伟 于 2011-10-13 18:31 编辑

单纯一个二叉树还比较好实现吧,二叉平衡树比较难,我看到二叉平衡树那里就卡住了,虽然思想能懂,但代码实现却一时半会搞不清如何写。所以我把数据结构放了一放,看别的= =
作者: jicz007    时间: 2011-10-13 21:38
{:soso_e100:}谢谢
作者: 方贤银    时间: 2011-10-17 20:49
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]);
        }
}
作者: 方贤银    时间: 2011-10-17 20:50
它的遍历: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]);
                }
        }
}
作者: 黄文伯    时间: 2013-3-24 18:56
树(二叉树)在学xml遍历和解析的时候会有很大用处
作者: xiewen    时间: 2013-5-1 15:11
你找的什么资料学习数据结构的?




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2