思路简述

一道困难题,是一道偏设计类的题目,首先第一个困难点就是如何用二叉树来表示一颗N叉树,其中一种可行常见的思想是:二叉树中节点的左子树为原N叉树中的孩子,右子树为原N叉树中的兄弟节点,下面是一个小例子:

有了这样的转换方式作为前提,剩下的就是代码,问题就在于这里需要递归地编码与解码,其实也是比较抽象的,在写递归函数的时候要分层的来考虑,适用于该层的处理就在函数内完成,下一层的处理就丢给递归,这样才不容易乱。

代码实现

这里用Golang语言来描述

/*** Definition for a Node.* type Node struct {*     Val int*     Children []*Node* }*//*** Definition for a binary tree node.* type TreeNode struct {*     Val int*     Left *TreeNode*     Right *TreeNode* }*/type Codec struct {}func Constructor() *Codec {return &Codec{}
}// 将N叉树编码为二叉树
func (this *Codec) encode(root *Node) *TreeNode {if root == nil{return nil}head := &TreeNode{Val: root.Val,Left: en(root.Children),}return head
}func en(children []*Node) *TreeNode{var head *TreeNode = nilvar cur *TreeNode = nilfor _, child := range children{newNode := &TreeNode{Val: child.Val,Left: en(child.Children),}if head == nil{head = newNode}else{cur.Right = newNode}cur = newNode}return head
}func (this *Codec) decode(root *TreeNode) *Node {if root == nil{return nil}head := &Node{Val: root.Val,Children: de(root.Left),}return head
}func de(root *TreeNode) []*Node{children := []*Node{}for root != nil{newNode := &Node{Val: root.Val,Children: de(root.Left),}children = append(children, newNode)root = root.Right}return children
}

Leetcode431.将N叉树编码为二叉树(golang)相关推荐

  1. LeetCode 431. 将 N 叉树编码为二叉树(递归/层序)

    文章目录 1. 题目 2. 解题 2.1 递归 2.2 BFS 1. 题目 设计一个算法,可以将 N 叉树编码为二叉树,并能将该二叉树解码为原 N 叉树. 一个 N 叉树是指每个节点都有不超过 N 个 ...

  2. LeetCode(合集) 路径总和(二叉树) golang copy的值复制

    112. 路径总和 给定一个二叉树和一个目标和,判断该树中是否存在根节点到叶子节点的路径,这条路径上所有节点值相加等于目标和. 说明: 叶子节点是指没有子节点的节点. 示例: 给定如下二叉树,以及目标 ...

  3. 101. 对称二叉树 golang

    101. 对称二叉树 给定一个二叉树,检查它是否是镜像对称的. 例如,二叉树 [1,2,2,3,4,4,3] 是对称的. 1/ \2 2/ \ / \ 3 4 4 3 但是下面这个 [1,2,2,nu ...

  4. 43-二叉树练习-LeetCode236二叉树的最近公共祖先

    题目 给定一个二叉树, 找到该树中两个指定节点的最近公共祖先. 百度百科中最近公共祖先的定义为:"对于有根树 T 的两个节点 p.q,最近公共祖先表示为一个节点 x,满足 x 是 p.q 的 ...

  5. C语言六叉树,递归创建二叉树c语言实现+详细解释

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 void CreatBiTree(BiTree T) { char a; scanf("%c",&a); if(a=='@') ...

  6. 【算法笔记】二叉树之基础遍历

    基础知识 一. 二叉树的种类 二叉树主要分为满二叉树.完全二叉树 满二叉树:如果一棵二叉树只有度为0的结点和度为2的结点,并且度为0的结点在同一层上,则这棵二叉树为满二叉树.深度为k的满二叉树,有2k ...

  7. leetcode刷题目录总结

    题目 题目 技巧 相似的题目 其他 1. 无序数组中找出目标为target的两个数 先定义下一个数,然后找两位的数是否存在 高频, 大厂刷题班, 第27节 2.逆序链表两数相加 链表.各位加法 高频, ...

  8. 如何学好C语言--你的学渣朋友告诉你

    光说不练假把式,光练不说傻把式,又练又说真把式. 真实感受,不是我不想学,是我真的不知道我哪里不会啊和得怎么做啊?本文作者当初就是这么废掉的 推荐两个练习的网站 (一)C语言网 https://www ...

  9. LeetCode1-620题汇总,希望对你有点帮助!

    时间很快,公众号发布的LeetCode题目,已经达到620道题了.今天把发布的1-620篇LeetCode文章整理一下,平时文章都放在比较末尾,阅读量都不高,相信很多人都没看过,如果对于算法感兴趣的, ...

最新文章

  1. spring18-3: 工厂bean代理-半自动
  2. 基于mcat开发智能合约应用(二)调用合约
  3. php正则表达式,数组,函数
  4. Redux Todos Example
  5. [js] js循环中调用异步的方法,如何确保执行结果的顺序是正确的?
  6. 定时备份 MySQL 并上传到七牛
  7. 最全攻略:数据分析师必备Python编程基础知识
  8. srs推flv流_SRS rtmp http-flv流低延时设置、测试
  9. ReactJS 知识简介
  10. QT分析之QApplication的初始化
  11. php cc攻击代码,PHP DDOS的UDP攻击,TCP攻击,和CC攻击的核心代码
  12. DT|一文看完企业绩效管理系统产品(EPM)的前世今生
  13. 分数阶微积分学薛定宇电子版_分数阶微积分学与分数阶控制 pdf epub mobi txt 下载...
  14. 命令行录制工具 asciinema
  15. Seata部署TC服务实现高可用和异地容灾
  16. 计算机里的文档怎么设置密码,文件夹怎么设置密码,教您如何给电脑上文件夹设置密码...
  17. 机器学习之聚类算法:K均值聚类(一、算法原理)
  18. Android仿微信上传图片发朋友圈
  19. android bea拷贝,从Android开发中学到一些东西
  20. 用python爬取外网

热门文章

  1. Ubuntu18.04之apt/dpkg用法
  2. Android开发之AudioManager(音频管理器)详解
  3. tensorflow之ExponentialMovingAverage
  4. tensorflow之卷积神经网络
  5. 华为2288H V5服务器安装win_server_2016问题解决过程
  6. 清空数据库中的某个表中数据
  7. Tcl Tutorial 笔记 ·ubuntu命令行运行tcl 命令
  8. Apache配置文件httpd.conf详解
  9. 计算机系统导论第九章,计算机系统导论 -- 读书笔记 -- 第三章 程序的机器级表示 (持续更新)...
  10. vue可视化拖拽生成工具_GitHub - 1260215278/dragUI: 基于vuedraggable.js + uni 的可视化拖拽编程,自动生成项目,自动生成代码,自行导入第三方组件...