开发者

Building binary tree from preorder bitstring

I am trying to do an assignment but I'm having trouble with the first step. The link below is 开发者_运维知识库the assignment for context:

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

A sample input is:

a0

0

a00

ab000

Which gives an output of:

Tree 1:

Invalid!

Tree 2:

height: -1

path length: 0

complete: yes

postorder:

Tree 3:

height: 0

path length: 0

complete: yes

postorder: a

Tree 4:

height: 1

path length: 1

complete: yes

postorder: ba

I am unable to progress on the assignment because I am stuck on actually building the binary tree from the input. The code I have been able to come up with so far is below:

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);
        }
    }
}

I am trying to test that I'm building the binary tree correctly with the preorder method, but whenever I run the program it seems to be stuck in an infinite loop somewhere. Can anyone help point out what is causing it? And am I actually on the right track with this? Does anyone have any hints on how I should go about building this particular binary tree?

Thanks.


it's not in an infinite loop. its just waiting for input from System.in


(char) 0 is the character which is represented by Unicode U+0000 (NUL). You want to use '0' (U+0030) in your test.

As an aside, the problem setter has not stated whether the given preorder is depth-first or breadth-first (or something else), so one cannot be certain how to rebuild the tree correctly.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜