力扣labuladong——一刷day53

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档

文章目录

  • 前言
  • [一、力扣1485. 克隆含随机指针的二叉树](#一、力扣1485. 克隆含随机指针的二叉树)
  • [二、力扣1490. 克隆 N 叉树](#二、力扣1490. 克隆 N 叉树)
  • [三、力扣133. 克隆图](#三、力扣133. 克隆图)
  • [四、力扣138. 随机链表的复制](#四、力扣138. 随机链表的复制)

前言


复制带有随机指针的二叉树或者链表,或者图,先设置一个map作为映射,原节点与复制后节点的映射,然后正常的遍历返回节点,但需要注意的是,遍历顺序,先遍历其他节点,最后遍历随机节点,因为随机节点可能没有被创建,遍历其他节点时,创建复制节点,遍历随机节点时,查找映射关系返回

一、力扣1485. 克隆含随机指针的二叉树

java 复制代码
/**
 * Definition for Node.
 * public class Node {
 *     int val;
 *     Node left;
 *     Node right;
 *     Node random;
 *     Node() {}
 *     Node(int val) { this.val = val; }
 *     Node(int val, Node left, Node right, Node random) {
 *         this.val = val;
 *         this.left = left;
 *         this.right = right;
 *         this.random = random;
 *     }
 * }
 */

class Solution {
    HashMap<Node,NodeCopy> map = new HashMap<>();
    public NodeCopy copyRandomBinaryTree(Node root) {
        if(root == null){
            return null;
        }
        if(map.containsKey(root)){
            return map.get(root);
        }
        NodeCopy cur = new NodeCopy(root.val);
        map.put(root,cur);
        cur.left = copyRandomBinaryTree(root.left);
        cur.right = copyRandomBinaryTree(root.right);
        cur.random = copyRandomBinaryTree(root.random);
        return cur;
    }
}

二、力扣1490. 克隆 N 叉树

java 复制代码
/*
// Definition for a Node.
class Node {
    public int val;
    public List<Node> children;

    
    public Node() {
        children = new ArrayList<Node>();
    }
    
    public Node(int _val) {
        val = _val;
        children = new ArrayList<Node>();
    }
    
    public Node(int _val,ArrayList<Node> _children) {
        val = _val;
        children = _children;
    }
};
*/

class Solution {
    public Node cloneTree(Node root) {
        if(root == null){
            return null;
        }
        Node cur = new Node(root.val);
        cur.children = new LinkedList<Node>();
        for(Node n : root.children){
            Node c = cloneTree(n);
            cur.children.add(c);
        }
        return cur;
    }
}

三、力扣133. 克隆图

java 复制代码
/*
// Definition for a Node.
class Node {
    public int val;
    public List<Node> neighbors;
    public Node() {
        val = 0;
        neighbors = new ArrayList<Node>();
    }
    public Node(int _val) {
        val = _val;
        neighbors = new ArrayList<Node>();
    }
    public Node(int _val, ArrayList<Node> _neighbors) {
        val = _val;
        neighbors = _neighbors;
    }
}
*/

class Solution {
    HashSet<Node> visited = new HashSet<>();
    Map<Node,Node> originToClone = new HashMap<>();
    public Node cloneGraph(Node node) {
        traverse(node);
        return originToClone.get(node);
    }
    void traverse(Node node){
        if(node == null){
            return;
        }
        if(visited.contains(node)){
            return;
        }
        visited.add(node);
        originToClone.put(node,new Node(node.val));
        Node copyNode = originToClone.get(node);
        for(Node n : node.neighbors){
            traverse(n);
            copyNode.neighbors.add(originToClone.get(n));
        }
    }
}

四、力扣138. 随机链表的复制

java 复制代码
/*
// Definition for a Node.
class Node {
    int val;
    Node next;
    Node random;

    public Node(int val) {
        this.val = val;
        this.next = null;
        this.random = null;
    }
}
*/

class Solution {
    Map<Node , Node> map = new HashMap<>();
    public Node copyRandomList(Node head) {
        if(head == null){
            return null;
        }
        if(map.containsKey(head)){
            return map.get(head);
        }
        Node cur = new Node(head.val);
        map.put(head,cur);
        cur.next = copyRandomList(head.next);
        cur.random = copyRandomList(head.random);
        return cur;
    }
}
相关推荐
Asize19 分钟前
438. 找到字符串中所有字母异位词
算法
Asize27 分钟前
283. 移动零
算法
许彰午1 小时前
13-describe元数据输出
java·低代码·架构·状态模式
用户3721574261352 小时前
Java 设置 Word 文档编辑限制并允许指定区域编辑
java
船厂电气自动化ai大模型2 小时前
AI大模型与数学·第57课 傅里叶全套工具链综合实战:串联级数/连续变换/DFT/FFT,图像、音频、扩散模型完整例题
数据结构·人工智能·深度学习·算法·机器学习
wuyk5552 小时前
从零吃透Modbus通信|第3章:STM32 Modbus RTU主机
服务器·开发语言·网络·数据结构·stm32·单片机·嵌入式硬件
宠友信息2 小时前
社区类源码开发实践中的仿小红书系统技术要点分析
java·spring boot·redis·mysql·uni-app·vue·内容运营
用户3721574261353 小时前
Java 设置 PDF 表单域只读或扁平化
java
人工智能培训3 小时前
人工智能数据安全下的个人信息保护实践方案
大数据·人工智能·算法·生活
Brilliantwxx3 小时前
【算法从零到千】【59-65】链表专题
数据结构·链表