java如何遍历结构树_java – 遍历树结构的算法遍历

Class Diagnostic {

//Get the size in bytes of an object

static long sizeOf(Object object);

//Get the references for an object (leafs)

static List getRefs(Object object);

//Implement this with those above

public Long objectSize(Object object);

}

如何实现objectSize以返回对象的字节大小?

方法objectSize返回组合的所有子节点(树上的每个节点)的字节大小.

例:

Object A (19 bytes)

/ \

/ \

B(20) C(37)

/

/

C(15)

答案:19 20 37 15 = 91

我在面试时遇到了这个问题,我很好奇看到别人的答案.因为,我对树遍历算法知之甚少.

我想出了这个……(我知道这是不好的;),只是想学习)

public Long objectSize(Object object) {

List objectList = new ArrayList();

Long sum = sizeOf(object);

objectList = getRefs(object);

for(Object object : objectList){

sum += objectSize(object);

}

return sum;

}

我注意到我可以有一个循环并运行stackoverflow错误,因为我没有检查我是否已经通过“节点”.然后我很难,我应该有另一个数据结构(如处理键/值的散列图)来处理临时列表以进行比较.

解决方法:

如果你正在处理一个真正的“树”结构,那么你不必担心周期.

你有基本的想法,但你需要考虑递归调用的实际返回值.如果我们假设对象的总大小(objectSize())等于其子项的大小加上它自己的大小(sizeOf()),那么您只需要确保将所有子树大小添加到一起.

这是你可以做到的一种方式:

public Long objectSize(Object object) {

List objectList = getRefs(object);

long sum = sizeOf(object);

for(Object object : objectList) {

sum += objectSize(object);

}

return Long.valueOf(sum);

}

您缺少的是递归的objectSize调用返回了一个值,并且该值需要包含(在这种情况下通过添加)到您的返回值中.

标签:java,algorithm,tree-traversal

来源: https://codeday.me/bug/20190703/1369839.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值