Leetcode431.将N叉树编码为二叉树(golang)
思路简述
一道困难题,是一道偏设计类的题目,首先第一个困难点就是如何用二叉树来表示一颗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)相关推荐
- LeetCode 431. 将 N 叉树编码为二叉树(递归/层序)
文章目录 1. 题目 2. 解题 2.1 递归 2.2 BFS 1. 题目 设计一个算法,可以将 N 叉树编码为二叉树,并能将该二叉树解码为原 N 叉树. 一个 N 叉树是指每个节点都有不超过 N 个 ...
- LeetCode(合集) 路径总和(二叉树) golang copy的值复制
112. 路径总和 给定一个二叉树和一个目标和,判断该树中是否存在根节点到叶子节点的路径,这条路径上所有节点值相加等于目标和. 说明: 叶子节点是指没有子节点的节点. 示例: 给定如下二叉树,以及目标 ...
- 101. 对称二叉树 golang
101. 对称二叉树 给定一个二叉树,检查它是否是镜像对称的. 例如,二叉树 [1,2,2,3,4,4,3] 是对称的. 1/ \2 2/ \ / \ 3 4 4 3 但是下面这个 [1,2,2,nu ...
- 43-二叉树练习-LeetCode236二叉树的最近公共祖先
题目 给定一个二叉树, 找到该树中两个指定节点的最近公共祖先. 百度百科中最近公共祖先的定义为:"对于有根树 T 的两个节点 p.q,最近公共祖先表示为一个节点 x,满足 x 是 p.q 的 ...
- C语言六叉树,递归创建二叉树c语言实现+详细解释
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 void CreatBiTree(BiTree T) { char a; scanf("%c",&a); if(a=='@') ...
- 【算法笔记】二叉树之基础遍历
基础知识 一. 二叉树的种类 二叉树主要分为满二叉树.完全二叉树 满二叉树:如果一棵二叉树只有度为0的结点和度为2的结点,并且度为0的结点在同一层上,则这棵二叉树为满二叉树.深度为k的满二叉树,有2k ...
- leetcode刷题目录总结
题目 题目 技巧 相似的题目 其他 1. 无序数组中找出目标为target的两个数 先定义下一个数,然后找两位的数是否存在 高频, 大厂刷题班, 第27节 2.逆序链表两数相加 链表.各位加法 高频, ...
- 如何学好C语言--你的学渣朋友告诉你
光说不练假把式,光练不说傻把式,又练又说真把式. 真实感受,不是我不想学,是我真的不知道我哪里不会啊和得怎么做啊?本文作者当初就是这么废掉的 推荐两个练习的网站 (一)C语言网 https://www ...
- LeetCode1-620题汇总,希望对你有点帮助!
时间很快,公众号发布的LeetCode题目,已经达到620道题了.今天把发布的1-620篇LeetCode文章整理一下,平时文章都放在比较末尾,阅读量都不高,相信很多人都没看过,如果对于算法感兴趣的, ...
最新文章
- spring18-3: 工厂bean代理-半自动
- 基于mcat开发智能合约应用(二)调用合约
- php正则表达式,数组,函数
- Redux Todos Example
- [js] js循环中调用异步的方法,如何确保执行结果的顺序是正确的?
- 定时备份 MySQL 并上传到七牛
- 最全攻略:数据分析师必备Python编程基础知识
- srs推flv流_SRS rtmp http-flv流低延时设置、测试
- ReactJS 知识简介
- QT分析之QApplication的初始化
- php cc攻击代码,PHP DDOS的UDP攻击,TCP攻击,和CC攻击的核心代码
- DT|一文看完企业绩效管理系统产品(EPM)的前世今生
- 分数阶微积分学薛定宇电子版_分数阶微积分学与分数阶控制 pdf epub mobi txt 下载...
- 命令行录制工具 asciinema
- Seata部署TC服务实现高可用和异地容灾
- 计算机里的文档怎么设置密码,文件夹怎么设置密码,教您如何给电脑上文件夹设置密码...
- 机器学习之聚类算法:K均值聚类(一、算法原理)
- Android仿微信上传图片发朋友圈
- android bea拷贝,从Android开发中学到一些东西
- 用python爬取外网
热门文章
- Ubuntu18.04之apt/dpkg用法
- Android开发之AudioManager(音频管理器)详解
- tensorflow之ExponentialMovingAverage
- tensorflow之卷积神经网络
- 华为2288H V5服务器安装win_server_2016问题解决过程
- 清空数据库中的某个表中数据
- Tcl Tutorial 笔记 ·ubuntu命令行运行tcl 命令
- Apache配置文件httpd.conf详解
- 计算机系统导论第九章,计算机系统导论 -- 读书笔记 -- 第三章 程序的机器级表示 (持续更新)...
- vue可视化拖拽生成工具_GitHub - 1260215278/dragUI: 基于vuedraggable.js + uni 的可视化拖拽编程,自动生成项目,自动生成代码,自行导入第三方组件...