代码附上:
/**
* 销毁二叉树
*
*/
BiTree DestroyBiTree(BiTree T) {
if (T != null) {
if (T.lchild != null) {
T.lchild = DestroyBiTree(T.lchild);
}
if (T.rchild != null) {
T.rchild = DestroyBiTree(T.rchild);
}
T = null;
}
return T;
}
public class BiTree {
char data;
BiTree lchild, rchild;
}
问题出在不知道如何释放根节点的内存,这样子虽然最后return null了,根节点的左右孩子也都为null,了,但是根节点的数据一直都还在,特来请教,想在函数里面做一些修改
全部代码:
package bitree;
public class BiTree {
char data;
BiTree lchild, rchild;
/**
* 创建二叉树
*/
int index = 0;
BiTree CreateBiTree(BiTree node, String str) {
char ch;
if (index < str.length()) {
ch = str.charAt(index);
index++;
} else {
return null;
}
if (ch == '#') {
node = null;
} else {
if (node == null)
node = new BiTree();
node.data = ch;
node.lchild = CreateBiTree(node.lchild, str);
node.rchild = CreateBiTree(node.rchild, str);
}
return node;
}
/**
* 判断二叉树是否为空
*/
int EmptyBiTree(BiTree node) {
if (node == null)
return 1;
return 0;
}
/**
* 求树的深度
*/
int DepthBiTree(BiTree node) {
int i = 0, j = 0;
if (node == null)
return 0;
if (node.lchild != null) {
i = DepthBiTree(node.lchild);
} else {
i = 0;
}
if (node.rchild != null) {
j = DepthBiTree(node.rchild);
} else {
j = 0;
}
return i > j ? (i + 1) : (j + 1);
}
/**
* 先序遍历
*/
void PreOrderTraverse(BiTree T) {
if (T == null)
return;
System.out.println(T.data);
PreOrderTraverse(T.lchild);
PreOrderTraverse(T.rchild);
}
/**
* 中序遍历
*/
void InOrderTraverse(BiTree T) {
if (T == null)
return;
InOrderTraverse(T.lchild);
System.out.println(T.data);
InOrderTraverse(T.rchild);
}
/**
* 后序遍历
*/
void PostOrderTraverse(BiTree T) {
if (T == null)
return;
PostOrderTraverse(T.lchild);
PostOrderTraverse(T.rchild);
System.out.println(T.data);
}
/**
* 销毁二叉树
*
*/
BiTree DestroyBiTree(BiTree T) {
if (T != null) {
if (T.lchild != null) {
T.lchild = DestroyBiTree(T.lchild);
}
if (T.rchild != null) {
T.rchild = DestroyBiTree(T.rchild);
}
T = null;
}
return T;
}
}
package bitree;
public class Test {
public static void main(String[] args) {
BiTree T = new BiTree(); // 初始化节点
T.CreateBiTree(T, "ABDH#K###E##CFI###G#J##");
System.out.println("树的深度:" + T.DepthBiTree(T));
System.out.println("销毁二叉树..");
T.DestroyBiTree(T);
// T = null;
System.out.println("树的深度:" + T.DepthBiTree(T));
System.out.println("");
}
}
这边的求出的深度不为0,
表示我的根节点并没有释放成功,求解?