###### 米兰的小铁匠z

2019-01-30 15:01 阅读 651

# 二叉树递归的销毁(Java)

/**
* 销毁二叉树
*
*/
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;
}
``````

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("");
}
``````

}

``````表示我的根节点并没有释放成功，求解？

``````
• 点赞
• 写回答
• 关注问题
• 收藏
• 复制链接分享

#### 1条回答默认 最新

• 已采纳
echo_wjcwjc 2019-01-30 16:06

只有BiTree我创建不出树来。你是怎么创建的

下面的代码我和你的destory一样。

我这边假设创建了只有根节点为4的树

不知道这样讲是否好一些。

在看不懂你可以看一下下面这个例子

点赞 评论 复制链接分享