树打印额外的字符

时间:2013-12-14 08:38:48

标签: java insert tree binary-search-tree

    public class TreeWords {

    public static void main (String[] args){
        Tree tree = new Tree();
        System.out.println("Enter your string.");
        Scanner in = new Scanner(System.in);
        String input = in.next();

        for (char ch : input.toCharArray()) {
            Tree tmp = new Tree(ch);
            tree.insert(tree, tmp);
        }
        tree.printInOrder(tree);
    }
}

class Tree {

    //Tree variables
    char letter;
    Tree left, right;


    //Constructors
    public Tree(){
        left = right = null;
    }
    public Tree(char input) {
        left = right = null;
        letter = input;
    }

    //Methods
    public void printInOrder(Tree root) {
        if (root == null) return;
        printInOrder(root.left);
        System.out.print(root.letter);
        printInOrder(root.right);
    }

    public void insert(Tree root, Tree tmp) {
        if (root == null) {
            root = tmp;
            return;
        }
        if (root.left == null) {
            root.left = tmp;
            return;
        }
        if (root.right == null) {
            root.right = tmp;
            return;
        }
        insert(root.left, tmp);
        insert(root.right, tmp);
    }
}

这是我正在处理的小程序的示例代码。基本上,它应该为每个树节点添加一个字符。但不知何故,似乎要么打印额外的字符,要么添加额外的字符。 例如:

Input : aaa
Output : aaaa

Input : hello
Output : oloholo�oloeolo

1 个答案:

答案 0 :(得分:1)

这里有几个问题。这两个将有希望让你开始

第一个是Java中的参数是按值传递的,因此在方法之外不会看到为它们赋值。所以前四行'插入'什么都不做。

第二个是一旦一个节点满了'39'。 (即左和右都是非空的)你将下一个值插入左右子树。

您也可能错过了'<'在插入方法中的比较,但我不确定是否' printInOrder'是指插入顺序或词典顺序。