public class BiTree {
/** 二叉樹的頭節點 */
Node header = null;
//Stack stack = new Stack();
/**
 * @param depth : Must be not lagger than 31.
 */
public BiTree(Object ele[]) {
initTree(header, ele, 0);
}

private void initTree(Node node, Object ele[], int index) {
if(index < ele.length && index >= 0) {
node = new Node(ele[index ++]);
initTree(node.lChild, ele, index);
initTree(node.rChild, ele, index);
}
}


/** 
 * 遞歸實現先序遍歷二叉樹
 */
public boolean preOrderTraverse(Node node) {
if(node != null) {
System.out.println("Data: " + node.element.toString());
if(preOrderTraverse(node.lChild))
preOrderTraverse(node.rChild);
}
return false;
}

public static void main(String args[]) {
System.out.println("Start");
String cal[] = new String[]{"-", "+", "a", "*", "b", "-", "c", "d", "/", "e", "f"};
BiTree tree = new BiTree(cal);
tree.preOrderTraverse(tree.header);
  System.out.println("End");
}
}
class Node {
/** 元素 */
Object element = null;
/** 左子樹 */
Node lChild = null;
/** 右子樹 */
Node rChild = null;
public Node(Object ele) {
element = ele;
}
}这是程序,我的问题是:运行时为什么树的内存空间在构造函数执行后为什么还是没有分配?被JVM回收了?
希望大侠指点,顶亦有分。

解决方案 »

  1.   

    private void initTree(Node node, Object ele[], int index) {
    if(index < ele.length && index >= 0) {
    // 这里传进去的node相当于二级指针,因此这时header仍然为null
    node = new Node(ele[index ++]); 更改如下:
    public class BiTree {
    /** 二叉樹的頭節點 */
    Node header = null;
    //Stack stack = new Stack();
    /**
     * @param depth : Must be not lagger than 31.
     */
    public BiTree(Object ele[]) {
    header = initTree(header, ele, 0);
    }

             //  返回值,供header接收
    private Node initTree(Node node, Object ele[], int index) {
    if(index < ele.length && index >= 0) {
    node = new Node(ele[index ++]);
    node.lChild = initTree(node.lChild, ele, index);
    node.rChild = initTree(node.rChild, ele, index);
    }

    return node;
    }


    /** 
     * 遞歸實現先序遍歷二叉樹
     */
    public boolean preOrderTraverse(Node node) {
    if(node != null) {
    System.out.println("Data: " + node.element.toString());
    if(preOrderTraverse(node.lChild))
    preOrderTraverse(node.rChild);
    }
    return false;
    }

    public static void main(String args[]) {
    System.out.println("Start");
    String cal[] = new String[]{"-", "+", "a", "*", "b", "-", "c", "d", "/", "e", "f"};
    BiTree tree = new BiTree(cal);

    if (tree.header == null)
    System.out.println("tree.header == null");

    tree.preOrderTraverse(tree.header);
      System.out.println("End");
    }
    }
    class Node {
    /** 元素 */
    Object element = null;
    /** 左子樹 */
    Node lChild = null;
    /** 右子樹 */
    Node rChild = null;
    public Node(Object ele) {
    element = ele;
    }
    }运行如下:
    F:\>javac BiTree.javaF:\>java BiTree
    Start
    Data: -
    Data: +
    Data: a
    Data: *
    Data: b
    Data: -
    Data: c
    Data: d
    Data: /
    Data: e
    Data: f
    End