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回收了?
希望大侠指点,顶亦有分。
/** 二叉樹的頭節點 */
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回收了?
希望大侠指点,顶亦有分。
解决方案 »
- 请一个简单的算法,自己实在想不出来!!!!!!!
- java到底有什么好??
- 函数里的循环,当执行第2遍的时候就跳出循环体了.
- 高人看看,读取properties文件报错了
- JSONArray.fromObject
- 如何编程实现 利用代理服务器访问网页?
- 【关于resultset】我想找到resultset中的记录个数,在使用last函数的时候,总是报错:对只转发结果集的无效操作: last
- 一个关于日期累加的问题,请帮我看看有没有更好的解决办法?100分,不够可以再给
- applet无法显示出来
- cmd命令行运行jar,输出内容卡死问题
- 请问一个关于JFileChooser的问题!!!
- %java_home%\lib\dt.jar,dt.jar是什么?有什么作用。?
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