commit a8748389d7775e742fa04fe2934233c912b1810f Author: Licsber Date: Thu Mar 3 18:03:39 2022 +0800 init commit. diff --git a/README.md b/README.md new file mode 100644 index 0000000..4002551 --- /dev/null +++ b/README.md @@ -0,0 +1,6 @@ +# Algorithm + +## 说明 + +记录自己实现的一些算法题. + diff --git a/java/三叉链表parent链深拷贝/BiTree.java b/java/三叉链表parent链深拷贝/BiTree.java new file mode 100644 index 0000000..6bc0259 --- /dev/null +++ b/java/三叉链表parent链深拷贝/BiTree.java @@ -0,0 +1,61 @@ +package site.licsber.bitree; + +public class BiTree { + public static Node deepCopy(Node srcRoot) { + if (srcRoot == null) { + return null; + } + + Node p = srcRoot; + Node res = new Node<>(p.data); + Node q = res; + + while (p != null) { + while (p.left != null && q.left == null) { + p = p.left; + q = new Node<>(p.data, q); + System.out.println(q); + q.parent.left = q; + } + + if (p.right != null && q.right == null) { + p = p.right; + q = new Node<>(p.data, q); + System.out.println(q); + q.parent.right = q; + } else { + while (p.parent != null && p.parent.right == p) { + p = p.parent; + q = q.parent; + } + p = p.parent; + q = q.parent; + } + } + return res; + } + + public static void walk(Node node) { + if (node != null) { + System.out.print(node); + walk(node.left); + walk(node.right); + } + } + + public static void main(String[] args) { + Node testRoot = new Node<>("A"); + testRoot.left = new Node<>("B", testRoot); + testRoot.right = new Node<>("C", testRoot); + testRoot.left.left = new Node<>("D", testRoot.left); + testRoot.left.left.right = new Node<>("G", testRoot.left.left); + testRoot.right.left = new Node<>("E", testRoot.right); + testRoot.right.right = new Node<>("F", testRoot.right); + testRoot.right.right.left = new Node<>("H", testRoot.right.right); + walk(testRoot); + + System.out.println(); + Node copyRoot = deepCopy(testRoot); + walk(copyRoot); + } +} diff --git a/java/三叉链表parent链深拷贝/Node.java b/java/三叉链表parent链深拷贝/Node.java new file mode 100644 index 0000000..9528718 --- /dev/null +++ b/java/三叉链表parent链深拷贝/Node.java @@ -0,0 +1,22 @@ +package site.licsber.bitree; + +public class Node { + public Node(T data) { + this.data = data; + } + + public Node(T data, Node parent) { + this.data = data; + this.parent = parent; + } + + public T data; + public Node left; + public Node right; + public Node parent; + + @Override + public String toString() { + return data.toString(); + } +} diff --git a/java/三叉链表parent链深拷贝/README.md b/java/三叉链表parent链深拷贝/README.md new file mode 100644 index 0000000..7e0c5c9 --- /dev/null +++ b/java/三叉链表parent链深拷贝/README.md @@ -0,0 +1,6 @@ +# 三叉链表 带parent链 深拷贝方法 + +## 来源 + +刘家可的课设 +