本帖最后由 weiyingguo 于 2013-03-25 10:24:20 编辑

解决方案 »

  1.   

    public class Node {
    public char data;
    public Node lchild, rchild;
    public int ltag, rtag;

    public Node(char data) { this(data, null, 0, null, 0); }
    public Node(char data, Node lchild, int ltag, Node rchild, int rtag) {
    this.data = data;
    this.lchild = lchild;
    this.ltag = ltag;
    this.rchild = rchild;
    this.rtag = rtag;
    }
    }
      

  2.   


    因为java是值传递,这样在方法内试图给引用变量(形参)赋值,对实参无效
    create(T.lchild);
      

  3.   

    不知道你是有心还是无心,你的代码已经变成了递归调用了....
    System.in.read();当你输入8加回车,产生了3个字符,
    8+13+10就是回车变成了13+10
    所以:
    char tr = (char)System.in.read();         
    System.in.read(); 
    System.in.read();---->这里要多加一个System.in.read();过滤了回车健.总之,混乱啊....不知道你想要什么样的效果
    public class ThreadedTree {     
    public Node root;     
    public ThreadedTree() 
    throws IOException{         
    this.root = create();         
    System.out.print(root.data + root.lchild.toString());     
    }           
    private Node create() throws IOException {         
    Node T = new Node(' ');         
    char tr = (char)System.in.read();     
    System.in.read();  
    System.in.read();  
    if(tr == '#')             
    T = null;         
    else { 
    T.data = tr;             
    System.out.print("Please input " + T.data + "'s left child: ");             
    T.lchild=create();             
    System.out.print("Please input " + T.data + "'s right child: ");             
    T.rchild=create();             
    //System.out.print( T.lchild.data);             }     }
    }
    return T;
    }
    public static void main(String[] args) {
    try {
    new ThreadedTree();
    } catch (IOException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
    }
    }
    }
      

  4.   

    我是想通过递归调用的方式给二叉树复制,我是想用System.in.read();进行char字符的读取,至于多的两个System.in.read()是用来吸收产生的空格,防止把空格赋给节点。我还是菜鸟,代码确实很乱,希望大家多多指教
      

  5.   

    那怎么才能使root作为根节点开辟一棵树呢?
      

  6.   

    像根节点那样通过调用返回值对实参赋值就行T.lchild = create(T.lchild);
    T.rchild = create(T.rchild);