1

課題をやろうとしていますが、最初のステップで問題があります。以下のリンクは、コンテキストの割り当てです。

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

入力例は次のとおりです。

a0
0
a00
ab000

次の出力が得られます。

ツリー 1:
無効です。
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

入力からバイナリ ツリーを実際に構築することに固執しているため、割り当てを進めることができません。これまでに思いついたコードは次のとおりです。

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

preorder メソッドを使用してバイナリ ツリーが正しく構築されていることをテストしようとしていますが、プログラムを実行するたびにどこかで無限ループに陥っているようです。誰がそれを引き起こしているのかを指摘するのを助けることができますか? そして、私は実際にこれで正しい軌道に乗っていますか? この特定のバイナリ ツリーを構築する方法について、ヒントはありますか?

ありがとう。

4

2 に答える 2

1

(char) 0Unicode U + 0000(NUL)で表される文字です。'0'テストで(U + 0030)を使用します。

余談ですが、問題設定者は、指定されたプレオーダーが深さ優先か幅優先(または他の何か)かを述べていないため、ツリーを正しく再構築する方法を確信できません。

于 2011-05-05T10:06:52.887 に答える
1

無限ループではありません。System.inからの入力を待っているだけです

于 2011-05-05T09:58:55.327 に答える