如何在 Go 中执行三叉树的深度复制? [复制]

2024-01-08

我正在尝试执行以下结构的深层复制:

// Ternary Tree
type Tree struct {
    Left  *Tree
    Mid *Tree
    Right *Tree
    Value interface{}
    Parent *Tree
    Orientation string
    IsTerminal bool
    Type string
}

以下是我的遗憾尝试。看起来我正在根处创建一棵新树,但它的子树仍然指向内存中的相同地址。

func (tree *Tree) CopyTree() *Tree {
    if (tree == nil) {
        return nil
    } else {
        copiedTree := &Tree {
            tree.Left.CopyTree(),
            tree.Mid.CopyTree(),
            tree.Right.CopyTree(),
            tree.Value,
            tree.Parent.CopyTree(),
            tree.Orientation,
            tree.IsTerminal,
            tree.Type}
        return copiedTree
    }
}

Go 中是否有任何有用的构造可以帮助深度复制结构?如果没有,我将如何自己执行此深复制?请注意,“deepcopy http://godoc.org/code.google.com/p/rog-go/exp/deepcopy“ 包不再工作,因为它使用了一些在 Go 1 发布时已弃用的函数


我很接近。我应该将 CopyTree 分配给父属性。

func (tree *Tree) CopyTree() *Tree {
    if (tree == nil) {
        return nil
    } else {
        copiedTree := &Tree {
            tree.Left.CopyTree(),
            tree.Mid.CopyTree(),
            tree.Right.CopyTree(),
            tree.Value,
            nil,
            tree.Orientation,
            tree.IsTerminal,
            tree.Type,
        }

        if copiedTree.Left != nil {
            copiedTree.Left.Parent = copiedTree
        }
        if copiedTree.Right != nil {
            copiedTree.Right.Parent = copiedTree
        }
        if copiedTree.Mid != nil {
            copiedTree.Mid.Parent = copiedTree
        }
        return copiedTree
    }
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在 Go 中执行三叉树的深度复制? [复制] 的相关文章

  • 防止使用 golang 服务器访问文件夹中的文件

    我在 golang 中有一个服务器可以处理这样的文件夹路径 fs http FileServer http Dir assets http Handle Images fs http ListenAndServe 8000 nil 但在这个
  • 正则表达式不匹配

    我正在尝试以下代码 d byte x01 x00 x00 x00 x00 x00 x00 x00 x00 x00 x00 x80J x13 x80SQ x80L xe0 x80 x92 x80L x80H xe0 r regexp Must
  • golang导入结构体指针

    好的 我有一个主包和一个 http 处理程序包 本质上我想做的是设置一个全局结构 这样我就可以随时调用该结构中的信息 我尝试的示例的基本概要如下 主包导入处理函数 主包调用handlerfunc Handlerfunc 将 http Res
  • 将 []string 传递给需要可变参数的函数

    为了不一遍又一遍地重复我的自我 我想创建一个处理运行一些命令的函数 func runCommand name string arg string error cmd exec Command name arg if err cmd Run
  • 数据库连接最佳实践

    我有一个使用 net http 的应用程序 我使用 http 注册了一些处理程序 这些处理程序需要从数据库中获取一些内容 然后才能继续编写响应并完成请求 我的问题是连接到该数据库的最佳实践是什么 我希望它能够以每分钟 1 个请求或每秒 10
  • GO并发编程测试

    我试图确保我的并发程序不存在以下情况 僵局 livelock 饥饿 我找到了以下工具http blog golang org race detector http blog golang org race detector 我尝试编译并运行
  • 共享来自单独命令/进程的属性

    我提供带有多个命令和子命令的命令行工具 我使用cobra https github com spf13 cobra命令行 我有两个单独的命令首先是前提条件e 给其他人 例如第一个命令是通过创建临时文件夹并验证某些文件来首选环境 第二个命令应
  • 无法连接到代理“证书由未知机构签名”

    我正在尝试通过 Kubernetes 部署上的 cloudsql proxy 容器连接到 CloudSQL 实例 我已安装 cloudsql 凭据以及值GOOGLE APPLICATION CREDENTIALS set 但是 我的日志中仍
  • Golang 按位运算以及一般字节操作

    我有一些 C 代码 可以对字节执行一些按位运算 我正在尝试在 golang 中做同样的事情 但遇到了困难 C 中的示例 byte a c byte data int j c data j c byte c j c a c 0xFF c 0x
  • 为什么我的 SQL 占位符没有被替换(使用 Go pq)?

    根据文档 我正在这样做 var thingname string asdf var id int err database QueryRow SELECT id from things where thing thingname Scan
  • 无法通过键获取 Gorilla 会话值

    我无法通过这种方式从会话中获取价值 它是nil session initSession r valWithOutType session Values key 完整代码 package main import fmt github com
  • 使用 testify 模拟接口方法两次,输入和输出不同

    如何在 golang 测试中模拟接口方法两次 例如 type myCache interface Get key string data interface error type service struct cache myCache f
  • 我可以根据我正在构建的操作系统导入 Golang 包吗?

    假设我有一个基于哪个操作系统的 go 项目 在某些情况下是哪个发行版 我想使用 Systemd 客户端包 Upstart 客户端包 sysv 客户端包 launchd 客户端包 是否可以有选择地导入每个包 以便我只导入我正在构建的每个操作系
  • 错误“binary.Write:无效类型”是什么意思?

    下面显示的代码 我创建了一个结构类型并希望将其编码为二进制 但它显示binary Write invalid type main Stu错误 我读过一些类似的代码 但我找不到为什么我的代码不起作用 type Stu struct Name
  • 使用覆盖率信息测试 Go 中的 os.Exit 场景 (coveralls.io/Goveralls)

    这个问题 如何在 Go 中测试 os exit 场景 https stackoverflow com questions 26225513 how to test os exit scenarios in go 以及其中得票最高的答案 列出
  • (转)如何使用toml文件?

    正如标题 我想知道如何使用 golang 中的 toml 文件 在此之前 我展示了我的 toml 示例 这样对吗 datatitle enable true userids 12345 67890 datatitle 12345 prop1
  • 编写每个处理程序中间件

    我希望从处理程序中提取一些重复的逻辑 并将其放入一些每个处理程序的中间件中 特别是 CSRF 检查 检查现有会话值 即身份验证或预览页面 等 我读了关于此的几篇文章 http justinas org writing http middle
  • 在 Go/ 中创建/更新 google 驱动器权限/ [使用 api 创建电子表格但无法访问它]

    我正在尝试使用 google Drive api 和以下代码创建电子表格 但我无法访问它 update 该文件似乎不在我在这里指定的驱动器中 有人知道为什么会发生这种情况吗 update 在字段中添加了父母 但有 404 错误 说找不到文件
  • cpp 浅复制或深复制中的默认复制构造函数?

    C 中默认的复制构造函数是进行浅复制还是深复制 我真的对 cpp 中的默认复制构造函数感到困惑 因为它执行浅复制或深复制 就像我所做的那样v2 v1 认为v1 1 2 3 现在如果我已经完成了v2 0 1 它没有得到反映 但我听说它做了浅复
  • GORM中的一对多递归关系

    我需要有一个Organization与父级有关系 像这样的事情 type Organization struct gorm Model Parent Organization gorm ForeignKey ParentId Name st

随机推荐

  • 经典 ASP 有 OR/M 吗?

    是否有可在经典 ASP 中使用的 OR M 对象关系映射器 即使是简化的类对象也会对处理简单的 CRUD 任务有很大帮助 是的 我知道 ASP NET 有很多 我将其中一些用于 ASP NET 站点 然而 这是一个使用 ASP VBScri
  • Firebase 的云功能 - 在Write 上发送电子邮件

    当有任何内容写入时 我正在尝试向我的电子邮件发送一封测试电子邮件 emails但电子邮件永远不会发送 并且功能日志为空 exports sendTestEmail functions database ref emails onWrite
  • 如何指定绘图应转到哪个图形?

    我打开了多个图形 我想在运行时独立更新它们 下面的玩具示例应该可以阐明我的意图 clf figure name a and b a and b should be plotted to this window hold on ylim 10
  • 缩小浏览器时,响应式页脚显示在部分内容上

    我对 CSS 和 HTML 还很陌生 据我所知 这个问题已被问过多次 但我似乎无法解决当前的问题 我一直在从事一些小项目 比如尝试重新创建具有额外功能的其他网站 我当前的任务是重新创建一个首页搜索区域 例如 google 实施与发布 我一直
  • SharePoint:看不到任何筛选器 Web 部件

    在 Office 2007 官方网站中 有大量对筛选 Web 部件的引用 当我尝试添加其中之一时 Sharepoint 中的 Web 部件列表不显示任何筛选器 Web 部件 如果有人经历过相同的问题和任何解决方案 请发帖 Thanks 在
  • Perl 中美元符号和数字符号如何一起工作?

    今天遇到一个问题 要求我在perl中确定数组的最大索引 我曾经这样做过 my array 1 2 3 print array array 1 但今天我偶然发现了这段代码 my array 1 2 3 print array array 我在
  • 使用 xattr 设置 Mac OSX 隔离属性

    StackOverflow 和其他地方有很多关于如何清除 Mac 隔离属性的信息 就我而言 我想设置它 这是为了测试我的应用程序是否已正确签名 以便用户在下载后会收到 不受信任的开发人员 警告 我的应用程序特别大 我们从大文件下载网站分发
  • JTable 行标题文本

    有人可以告诉我是否有一种方法可以添加带有文本的行标题 或者也许有某种类型的技巧 这将允许我们做这样的事情 行标题是 one way https stackoverflow com a 8187799 714968 更好的方法 http ti
  • 如何抑制“void*”到“foo*”转换的警告(通过 -fpermissive 减少错误)

    我正在尝试用 g 编译一些 c 代码 是的 故意的 我收到如下错误 例如 error invalid conversion from void to unsigned char fpermissive adding fpermissive到
  • Material-UI 和 gatsby 官方示例

    我根据官方示例使用 gatsby 和 Material UI 我想知道是否必须添加withRoot包装到每个使用 MUI 的组件 或者我是否可以包装我想要使用 MUI 的最高级别组件 我在渲染时遇到问题 不知道如何找出原因 在开发中一切都很
  • Kafka 消费者:如果未提交先前的消息偏移并且禁用自动提交,则希望再次读取相同的消息

    我已经关闭了自动提交 并且在阅读后也没有提交来自消费者的偏移量 检查的消费者滞后也保持不变 它确保偏移量不会被提交 但问题是 它正在消耗下一条消息 而不是再次使用相同的消息 我怎样才能一遍又一遍地阅读同一条消息 仅当先前的偏移量已提交时 我
  • 在 numpy 中表示一阶微分方程

    我有一个等式dy dx x y 5和一个初始值 y 0 3 我想知道如何使用 pyplot 绘制该函数的精确图形 我也有一个x np linspace 0 interval steps 1 我想用它作为 x 轴 所以我只寻找 y 轴值 提前
  • 如何使用 Sha256 证书为 .NET 4.0(如 Visual Studio Update 3)签署 ClickOnce

    我正在尝试使用 clickonce 安装程序部署 Outlook 加载项 我有一个几乎可以工作的批处理文件 但是 当尝试在 Windows XP 上安装时 我收到错误 xml 签名无效 众所周知 XP 无法使用 SHA256 证书examp
  • 在代码中配置 WCF 服务绑定

    我有一个用代码创建的自托管 Web 服务 protected void StartService Type serviceType Type implementedContract string serviceDescription Uri
  • `git difftool -d` 在 Mac 上出现“文件不存在”错误

    我正在尝试使用命令git difftool d对于文件夹差异 命令成功获取差异列表 在 FileMerge app 中显示 但是当我尝试打开每个差异文件时 我明白了file does not exist error 输出日志 git dif
  • Bash 命令从所有文件名中删除前导零

    我有一个目录 其中包含一堆文件 其名称如下 001234 jpg 001235 jpg 004729342 jpg 我想从所有文件名中删除前导零 所以我会留下 1234 jpg 1235 jpg 4729342 jpg 我一直在尝试 sed
  • 使用 php 包含在 jquery 中

    我想做的是使用 phpinclude在一个jquery追加属性 像这样的东西 a popup href click function body append div class popup block div 我的脚本位于服务器端的 php
  • Android 多行工具栏标题

    我有一个工具栏 在横向模式下不像平常那 么宽 但它的高度比平常更高 因此我想在横向模式下将标题设置为多行 准确地说是两行 我尝试了一些方法 将 TextView 放入工具栏内 但是当我尝试访问 TextView 以设置其标题 因为标题是可变
  • awk CSV 带标题 Windows 拆分

    好的 我有一个 csv 文件 需要根据列值进行拆分 这很好 但我无法在每个文件中打印标题 目前我使用 awk FS output 3 csv print 0 gt output test csv 它根据第 3 列分割文件 但我不知道如何向每
  • 如何在 Go 中执行三叉树的深度复制? [复制]

    这个问题在这里已经有答案了 我正在尝试执行以下结构的深层复制 Ternary Tree type Tree struct Left Tree Mid Tree Right Tree Value interface Parent Tree O