我需要用Java构建一个树.我已经完成了树作为数据结构.但是我在将数据从数组提供给树时遇到了一些问题.这是我需要做的.

domain = {"b", "c"};

那么,树应该像:

null -> b,c

b->c c->b

所以基本上我希望节点的子节点拥有来自域的所有子节点中尚未覆盖的子节点.问题是,尽管有很多尝试,但我无法编写代码来执行此操作.我知道它可以用递归函数完成.

我不想要完整的代码.对解决方案的任何暗示都将受到高度赞赏.谢谢.

附:

我清楚说明了. “”树中的每个节点都具有来自域的子节点的所有值,除了已经覆盖的子节点或其父节点“”

如图所示,a是基数(比如null).它具有域(b,c)中的所有值. b有c,c有b.

解决方法:

规范说:

Every node in the tree has all the values as children from the domain apart from the ones that are already covered in it or its parents

它有点不清楚,但我假设它覆盖在它或它的父节点意味着如果值x不在从节点到根的路径上,则允许值为x的节点.在这种情况下,树可以像这样构造(语言是Haskell):

import List

data Tree = Tree String [Tree]

build x xs = Tree x children

where

children = map (\x -> build x (delete x xs)) xs

例如,给定根值“a”和域值列表[“b”,“c”,“d”],程序构造一个值为“a”的根节点,并且递归地构造3个子节点:

>根值“b”和域[“c”,“d”],

>根值“c”和域[“b”,“d”],

>和根值“d”和域[“b”,“c”].

在伪Python中,这是Haskell程序的算法:

def build(root_value, domain):

node = Tree(root_value)

# For each value in the domain:

for i in range(len(domain)):

child_root = domain[i]

# The child domain is equal to the original domain

# with value at position 'i' removed.

child_domain = domain[: i] + domain[i + 1:]

# Recursively build the child

child = build(child_root, child_domain)

# - and add the child to the node.

node.add_child(child)

return node

这是对构建函数的测试,它打印问题示例的树和上面的示例:

pretty level (Tree x children) = do

mapM_ putStr [indent, x, "\n"]

mapM_ (pretty (level + 3)) children

where

indent = replicate level ' '

main = do

putStrLn "Tree for a -> b, c:"

pretty 0 (build "a" ["b", "c"])

putStrLn "\nTree for a -> b, c, d:"

pretty 0 (build "a" ["b", "c", "d"])

测试使用缩进来显示树中每个节点的深度:

Tree for a -> b, c:

a

b

c

c

b

Tree for a -> b, c, d:

a

b

c

d

d

c

c

b

d

d

b

d

b

c

c

b

标签:java,data-structures,tree

来源: https://codeday.me/bug/20190709/1418342.html

java 数组构造_java – 从数组构造(非二进制)树相关推荐

  1. java创建数组对象_java对象数组 创建对象数组,初始化对象数组

    对象数组的概念: 如果一个数组中的元素是对象类型,则称该数组为对象数组. 当需要一个类的多个对象时,应该用该类的对象数组来表示,通过改变下标值就可以访问到不同的对象. 对象数组的定义和使用: 对象数组 ...

  2. java反射 数组类型_Java反射-数组

    通过反射使用数组有时会比较棘手.特别是需要获得一个特定类型数组的Class对象,如int[]等.本文将讨论如何通过反射创建数组和获得他们的Class对象. 注意:本文在阅读Eyal Lupu的博客&q ...

  3. java数组复制_Java自学-数组 复制数组

    Java 如何复制数组 数组的长度是不可变的,一旦分配好空间,是多长,就多长,不能增加也不能减少 步骤 1 : 复制数组 把一个数组的值,复制到另一个数组中 System.arraycopy(src ...

  4. java数组去重_Java实现数组去重

    思路就是新建一个数组,把原数组的元素赋进去,再去除因此产生的0. import java.util.Arrays; public class Solution { public static void ...

  5. java画蝴蝶_java之数组

    1.数组的特点 1)在Java中,无论使用数组或容器,都有边界检查.如果越界操作就会得到一个RuntimeException异常. 2)在Java中,数组是一种效率最高的存储和随机访问对象引用序列的方 ...

  6. java 数组 指针_java指针数组的使用

    1,一直都在学java是没有指针的,让我纠结的是java指针确实是存在的,java数组就是真正的指针. 以为C语言老师说过C语言里数组就是指针,但是我感觉这句话用在C语言里不是很严谨,而用在java里 ...

  7. java 对象数组定义_Java对象数组定义与用法详解

    本文实例讲述了Java对象数组定义与用法.分享给大家供大家参考,具体如下: 所谓的对象数组,就是指包含了一组相关的对象,但是在对象数组的使用中一定要清楚一点:数组一定要先开辟空间,但是因为其是引用数据 ...

  8. java 数组 内存_Java 中数组的内存分配

    Java 中数组的内存分配 1.Java 程序在运行时,需要在内存中分配空间.为了提高运算效率,就对空间进行了不同区域的划分,因为每一片区域都有特定的处理数据和内存管理方式. 2.数组基本概念 数组是 ...

  9. java改变数组长度_Java修改数组长度

    java中没有关于修改数组长度的api,在此本人提供了修改数组长度的两个函数:arrayAddLength()和arrayReduceLength().详细见代码. [java] view plain ...

  10. java 数组参数_java中 数组可以作为形式参数传递到调用的方法中吗?要怎么操作?...

    展开全部 可以,操作代码如下: public class ArrTest{ public static void doTest(String[] args){ for(int i=0;i System ...

最新文章

  1. 一个域名可以对应多个ip地址吗_域名解析 | A记录 ,CNAME,MX,NS 你懂了吗
  2. js插件---WebUploader 如何接收服务端返回的数据
  3. 无法使用前导 .. 在顶级目录上退出
  4. C指针原理(20)-C指针基础
  5. Linux下使用shell实现上传linux下某个目录下所有文件到ftp
  6. mongodb之索引使用小结
  7. 2021最新Chrome 88版本 绕过webdriver检测
  8. 世界杯运营:时隔2年,这个教科书般的Push,看完依然泪奔
  9. 前后端分离图片验证码session获取问题
  10. 一起认识国产又好用的uni-app
  11. 录屏怎么录声音?注意一点轻松录制外部音源
  12. 线上云展厅产品展区摆设技巧
  13. html 404错误页面模板,50款国外非常有意思的网页404错误页面模板
  14. 关于An association from the table refers to an unmapped class
  15. 比心app源码,携带对象参数跳转页面
  16. 产生式规则实现动物、手机识别系统
  17. 薛定谔教程--Glide分子对接 | Ligand Docking
  18. 诺基亚出了款香蕉手机!你是想对抗苹果嘛?
  19. 实现一个C语言版本的圣诞树(附源代码)
  20. 500kV某变电站红外测温 检测技术方案

热门文章

  1. iSCSI又称为IP-SAN
  2. JDK,JRE,JVM三者关系
  3. 信息学奥赛一本通 1145:字符串p型编码 | OpenJudge NOI 1.7 31:字符串p型编码
  4. 生活大爆炸版石头剪刀布(洛谷-P1328)
  5. 信息学奥赛C++语言:最高分数的学生姓名
  6. 21 MM配置-采购-定义采购组
  7. python内置函数可以用来_Python内置函数——compile
  8. C++:指针数组理解
  9. RabbitMQ负载均衡
  10. arxiv.org经常打不开真是让人头大