2011-05-05 136 views
2

我正在尝试做一项任务,但我在第一步遇到问题。下面的链接是用于上下文中的分配:从预置位bitstring构建二叉树

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

样品输入是:

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

我想测试我正确地建立二叉树的前序的方法,但每当我运行它,它似乎被卡在某处的无限循环中。任何人都可以帮忙指出是什么造成的?我是否真的在这个正确的轨道上?有没有人对我应该如何去构建这个特定的二叉树有任何提示?

谢谢。

+1

您的代码非常混乱 - 请尝试先将它整理出来。 insert()方法 - 为什么只有当它被覆盖时节点才是参数?将整数零转换为char?你的意思是'0'? – 2011-05-05 10:03:25

+2

不要删除你的问题 - “没关系,坏问题,谢谢你的答案。”应该是一个评论 – 2011-05-05 10:58:06

回答

1

它没有处于无限循环。它只是等待来自System.in的输入

1

(char) 0是由Unicode U + 0000(NUL)表示的字符。你想在你的测试中使用'0'(U + 0030)。另外,问题制定者还没有说明给定的前序是深度优先还是宽度优先(或其他),所以不能确定如何正确地重建树。