从preorder bitstring构建二叉树

时间:2011-05-05 09:49:57

标签: java binary-tree bitstring

我正在尝试做任务,但我遇到了第一步的麻烦。以下链接是上下文的分配:

https://docs.google.com/viewer?a=v&pid=explorer&chrome=true&srcid=0B1DkmkmuB-leNDVmMDU0MDgtYmQzNC00OTdkLTgxMDEtZTkxZWQyYjM4OTI1&hl=en

示例输入是:

  

A0
  0
  A00
  ab000

其输出为:

  

树1:
  无效!
  树2:
  身高:-1
  路径长度:0
  完成:是的   后序:
  树3:
  身高:0
  路径长度:0
  完成:是的   后序:a   树4:
  身高:1
  路径长度:1
  完成:是的   后序:ba

我无法继续进行分配,因为我坚持实际从输入构建二叉树。我到目前为止能够提出的代码如下:

public class btsmall {
    int k = 0;
    char[] cArray;

    public static void main(String[] args) throws IOException {
        new btsmall().run();
    }

    static class Node {
        Node left;
        Node right;
        char value;

        public Node(char value) {
            this.value = value;
        }
    }

    public void run() throws IOException {
        String preorder;
        InputStreamReader input = new InputStreamReader(System.in);
        BufferedReader reader = new BufferedReader(input);

        while ((preorder = reader.readLine()) != null) {
            cArray = preorder.toCharArray();
            Node tree = null;
            insert(tree);
            preorder(tree);
            k = 0;
        }
    }

    public void insert(Node node) {
        if (cArray[k] == (char) 0) {
            node = new Node((char) 0);
            node.left = node.right = null;
            k++;
        } else {
            node = new Node(cArray[k]);
            k++;
            insert(node.left);
            insert(node.right);
        }
    }

    public void preorder(Node node) {
        if (node != null) {
            System.out.println(node.value + " ");
            preorder(node.left);
            preorder(node.right);
        }
    }
}

我正在尝试测试我正在使用预订方法正确构建二叉树,但每当我运行该程序时,它似乎陷入某个无限循环。任何人都可以帮助指出导致它的原因吗?我实际上是在正确的轨道上吗?有没有人对如何构建这个特定的二叉树有任何暗示?

感谢。

2 个答案:

答案 0 :(得分:1)

它不在无限循环中。它只是等待来自System.in的输入

答案 1 :(得分:1)

(char) 0是由Unicode U + 0000(NUL)表示的字符。您希望在测试中使用'0'(U + 0030)。

顺便说一句,问题设定者没有说明给定的预订顺序是深度优先还是广度优先(或其他东西),因此无法确定如何正确地重建树。