新手求助:二叉树的递归删除

米兰的小铁匠z 2019-01-30 03:04:51
代码附上:
/**
* 销毁二叉树
*
*/
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,了,但是根节点的数据一直都还在,特来请教,想在函数里面做一些修改
...全文
214 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
nayi_224 2019-01-31
  • 打赏
  • 举报
回复
补充一下,java中所有变量名首字母小写; 变量名尤其不要与泛型名重复; 泛型是这么用的
class BiTree1<T>{
	int index = 0;
	T data;
	BiTree lchild, rchild;
}
nayi_224 2019-01-31
  • 打赏
  • 举报
回复
我说的= null是写在你的main方法里的,这么写比较简单。 虽然引用对象类型的参数拥有同样的引用地址,但是你在函数内部= null改的只是函数作用域内的T的引用地址,main方法里的T变量的引用地址没有变化。你又没有写T.data = null,根节点的数据自然不会被删除。
	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;
			T.data = ' ';
		}
		return T;
	}
  • 打赏
  • 举报
回复
嗯嗯 感谢回复,,从C转过来的,一些习惯暂时没改过来,抱歉
  • 打赏
  • 举报
回复
恩恩 我就是令T = null 但是发现 在函数返回的时候并没有修改
nayi_224 2019-01-30
  • 打赏
  • 举报
回复
如果你指的是把里面的数据都删除,那直接T = null;或者T = new BiTree();就行了。在java中,你做的那些处理都是应该交给gc完成的。

50,530

社区成员

发帖
与我相关
我的任务
社区描述
Java相关技术讨论
javaspring bootspring cloud 技术论坛(原bbs)
社区管理员
  • Java相关社区
  • 小虚竹
  • 谙忆
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧