将N叉树编码位二叉树

简介: 将N叉树编码位二叉树

力扣原题链接——将N叉树编码位二叉树

题目

设计一个算法,可以将 N 叉树编码为二叉树,并能将该二叉树解码为原 N 叉树。
一个 N 叉树是指每个节点都有不超过 N 个孩子节点的有根树。
类似地,一个二叉树是指每个节点都有不超过 2 个孩子节点的有根树。
你的编码 / 解码的算法的实现没有限制,你只需要保证一个 N 叉树可以编码为二叉树且该二叉树可以解码回原始 N 叉树即可。

例如,你可以将下面的 3-叉 树以该种方式编码:
在这里插入图片描述
注意,上面的方法仅仅是一个例子,可能可行也可能不可行。
你没有必要遵循这种形式转化,你可以自己创造和实现不同的方法。

题解

我们不按官方思路,我们的思路是:让多叉树的任何一个X的所有孩子,都放在X的左树的右边界上,解题过程中用到了深度优先遍历的思想

package com.harrison.class07;

import java.util.ArrayList;
import java.util.LinkedList;
import java.util.List;

/**
 * @author Harrison
 * @create 2022-03-09-20:44
 * @motto 众里寻他千百度,蓦然回首,那人却在灯火阑珊处。
 */
public class Code05_EncodeNaryTreeToBinaryTree {
    public static class Node{
        public int val;
        public List<Node> children;

        public Node(){

        }

        public Node(int _val){
            val=_val;
        }

        public Node(int _val,List<Node> _children){
            val=_val;
            children=_children;
        }
    }

    public static class TreeNode{
        public int val;
        public TreeNode left;
        public TreeNode right;

        public TreeNode(int x){
            val=x;
        }
    }

    class Codec{
        public TreeNode encode(Node root){
            if(root==null){
                return null;
            }
            TreeNode head=new TreeNode(root.val);
            head.left=en(root.children);
            return head;
        }

        public TreeNode en(List<Node> children){
            TreeNode head=null;
            TreeNode cur=null;
            for(Node child:children){
                TreeNode tNode=new TreeNode(child.val);
                if(head==null){
                    head=tNode;
                }else{
                    cur.right=tNode;
                }
                cur=tNode;
                cur.left=en(child.children);
            }
            return head;
        }

        public Node decode(TreeNode root){
            if(root==null){
                return null;
            }
            return new Node(root.val,de(root.left));
        }

        public List<Node> de(TreeNode root){
            List<Node> children=new ArrayList<>();
            while(root!=null){
                Node cur=new Node(root.val,de(root.left));
                children.add(cur);
                root=root.right;
            }
            return children;
        }
    }
}
相关文章
|
3月前
|
人工智能 供应链 数据可视化
一文读懂AI引擎与Together规则引擎重塑智能决策
从1950年图灵提出人工智能设想到如今AI引擎实现自主决策,Together规则引擎正成为智能决策核心。它通过动态规划、多工具调用与持续学习机制,赋能供应链、财务、定价等场景,提升决策透明度与效率。Together助力AI引擎突破落地瓶颈,推动企业管理迈向“决策即服务”新时代。
|
SQL 存储 关系型数据库
Mysql并发控制和日志
通过深入理解和应用 MySQL 的并发控制和日志管理技术,您可以显著提升数据库系统的效率和稳定性。
407 10
|
10月前
|
人工智能 前端开发 程序员
平替cursor吗?通义灵码创造AI导航网站
作为一名古老语言COBOL程序员,我习惯了面向过程的编程方式。近期尝试用通义灵码创建了一个AI导航网站,并发布在微信公众号上。由于前端知识有限,网站的CSS特效是逐步生成的。尽管之前使用过cursor、cline+deepseek等工具,但这次通义灵码的帮助让我更顺利地完成了项目。网站展示了收集的资料和资源,效果令人满意。 [查看网站](https://mp.weixin.qq.com/s/LsrAgdq6-0rnednxDjrqUw)
|
10月前
|
人工智能 Linux API
零门槛本地部署!手把手教你用Ollama+Chatbox玩转DeepSeek大模型
本教程介绍如何在个人电脑上免费部署DeepSeek模型,无需高端显卡。通过Ollama和Chatbox两款轻量工具,用户可以在普通CPU上流畅运行大型语言模型。Ollama支持跨平台操作,提供一键式安装和模型管理;Chatbox则是多平台AI客户端,支持多种主流模型。教程涵盖Ollama和Chatbox的安装、DeepSeek模型的下载与配置,帮助你在本地轻松搭建智能助手,适用于学术研究、代码编写和日常问答等场景。
3905 19
零门槛本地部署!手把手教你用Ollama+Chatbox玩转DeepSeek大模型
|
供应链 算法 安全
阿里云E2 云采销:云采销产品整体介绍|学习笔记(一)
快速学习阿里云E2 云采销:云采销产品整体介绍。
阿里云E2 云采销:云采销产品整体介绍|学习笔记(一)
|
存储 监控 算法
【操作系统】—处理机调度的概念以及层次
【操作系统】—处理机调度的概念以及层次
【操作系统】—处理机调度的概念以及层次
|
消息中间件 Java 中间件
一个空格引发的“救火之旅”:记一次SOFA RPC的排查过程
一个空格引发的“救火之旅”:记一次SOFA RPC的排查过程
一个空格引发的“救火之旅”:记一次SOFA RPC的排查过程
|
机器学习/深度学习 数据可视化 计算机视觉
基于DenseNet的图像识别
在本文中,我们提出了一种架构,将这种见解提炼成一个简单的连接模式:为了确保网络中各层之间的最大信息流,我们**将所有层(具有匹配的特征图大小)直接相互连接**。为了保持前馈特性,**每一层都从所有前面的层获得额外的输入,并将其自己的特征图传递给所有后续层**。图 1 示意性地说明了这种布局。至关重要的是,与 ResNets 相比,我们在将特征传递到层之前从**不通过求和来组合特征**。相反,我们**通过连接(Concatenate操作)它们来组合特征
518 0
基于DenseNet的图像识别