java的树_Java中的树实现

我得到了以下树:

然后我们被告知使用last-child / previous-sibling方法来改变三者的实现.结果如下:

我现在正致力于Java实现,以在此树上执行​​不同的功能.我们有一个Tree接口和一个TreeNode接口.它们都有很多我们要填写的功能.

节点的创建方式如下:

MyTreeNode a = new MyTreeNode ("a");

以这种方式创建树(带有根):

MyTree tree = new MyTree (a);

最后,节点给兄弟姐妹这样的孩子:

e.setChild(j);

e.setSibling(d);

我已经为setChild,setSibling,getNextSibling,getFirstChild和getChildren编写了方法.例如,这是getChildren的代码:

public List getChildren ()

{

List children = new ArrayList ();

MyTreeNode x = this.child;

children.add(x);

while (x != null && x.sibling != null) {

x = x.sibling;

children.add(x);

}

return children;

}

我现在完全迷失了如何编写节点的子树的高度,深度,大小,getPreOrder,getPostOrder和树大小的方法.

由于树现在处于这种不同的表示形式,我不确定如何编写递归方法来检查节点的高度或深度.通常,据我所知,你会递归检查左/右子树..但现在没有(据我所见).我能想到的唯一方法是使用许多if语句和while循环遍历每个节点..但这不是最好的方法.

如何使用树的这种实现递归地编写这些方法?

此外,我不知道如何获得有关整个树的详细信息,因为节点不以任何方式存储在一起.它们是按照我上面展示的方式实现的,所以我不确定如何集中收集有关所有节点的数据.

如何在所有节点上创建树大小,isEmpty或makeEmpty等方法作为整个树?

对于过于冗长的解释感到抱歉.

最佳答案 假设您的树有一个这样的节点结构:

public class Node{

String nodeName;

Node left;

Node right;

public Node(String nodeName, Node left, Node right){

this.nodeName = nodeName;

this.left = left;

this.right= right;

}

}

以下是我对如何构建新树的看法:当您向树中添加新节点时,您仍然会维护树结构.根据您将节点添加到树中的方式,您仍然可以继续添加到父级的左侧或右侧.

可视化新树的一种可能方式是这样的:

A

/

E

/ \

D J

/ \ / \

C H I K

/

B

/

G

/

F

注意:我在这里假设,如果它是一个孩子,它将被添加到你父母的左边.但这在理想情况下取决于您的要求

如果您可以通过这种方式显示此树,则用于获取高度,前序,后序遍历的递归函数仍然保持不变.

还有几个提示:

>添加兄弟就像在节点的父节点的左侧或右侧添加节点,即如果当前节点位于其父节点的左侧,则您将在右侧添加新节点.

>添加孩子将保持不变.根据您的逻辑,您可以将新节点添加为当前节点的左子节点或右子节点.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值