服务器之家:专注于服务器技术及软件下载分享
分类导航

PHP教程|ASP.NET教程|Java教程|ASP教程|编程技术|正则表达式|C/C++|IOS|C#|Swift|Android|VB|R语言|JavaScript|易语言|vb.net|

服务器之家 - 编程语言 - Java教程 - Java实现多叉树和二叉树之间的互转

Java实现多叉树和二叉树之间的互转

2023-05-09 01:04未知服务器之家 Java教程

目录 前言 正文 思路分析 代码实现 总结 前言 本文主要介绍如何把一个多叉树转换成二叉树以及把二叉树还原成多叉树。 正文 给出一个多叉树,实现一个函数,这个函数可以把多叉树转成二叉树,再实现一个函数把二叉树还原成

目录
  • 前言
  • 正文
  • 思路分析
  • 代码实现
  • 总结

前言

本文主要介绍如何把一个多叉树转换成二叉树以及把二叉树还原成多叉树。

正文

给出一个多叉树,实现一个函数,这个函数可以把多叉树转成二叉树,再实现一个函数把二叉树还原成多叉树。

如下图所示,将多叉树按某种规则进行转化,转成二叉树,并且能从二叉树再按某种规则还原回来。

Java实现多叉树和二叉树之间的互转

先看下二叉树转二叉树的代码实现,该方式接收一个多叉树的头节点,返回一个二叉树的头节点:

public TreeNode encode(Node root) {
   if (root == null) {
      return null;
   }
   TreeNode head = new TreeNode(root.val);
   head.left = en(root.children);
   return head;
}
private 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;
}

总结

本文主要介绍如何把一个多叉树转换成二叉树以及把二叉树还原成多叉树,文中分析了多叉树和二叉树相互转化的过程,实现起来不是很难,但是需要一点技巧,在代码实现的过程中,使用了深度优先遍历。

原文地址:https://juejin.cn/post/7229698783645696060

延伸 · 阅读

精彩推荐