1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 | /* * To change this template, choose Tools | Templates * and open the template in the editor. */ package javaprojects; import java.util.HashSet; import java.util.Set; /** * */ public class LCA { private class Node { int data; Node[] children = new Node[0]; Node parent; public Node() { } public Node(int v) { data = v; } @Override public boolean equals(Object other) { if (this.data == ((Node) other).data) { return true; } return false; } } private Node root; public LCA() { root = new Node(3); root.children = new Node[4]; root.children[0] = new Node(15); root.children[0].parent = root; root.children[1] = new Node(40); root.children[1].parent = root; root.children[2] = new Node(100); root.children[2].parent = root; root.children[3] = new Node(10); root.children[3].parent = root; root.children[0].children = new Node[3]; root.children[0].children[0] = new Node(22); root.children[0].children[0].parent = root.children[0]; root.children[0].children[1] = new Node(11); root.children[0].children[1].parent = root.children[0]; root.children[0].children[2] = new Node(99); root.children[0].children[2].parent = root.children[0]; root.children[2].children = new Node[2]; root.children[2].children[0] = new Node(120); root.children[2].children[0].parent = root.children[2]; root.children[2].children[1] = new Node(33); root.children[2].children[1].parent = root.children[2]; root.children[3].children = new Node[4]; root.children[3].children[0] = new Node(51); root.children[3].children[0].parent = root.children[3]; root.children[3].children[1] = new Node(52); root.children[3].children[1].parent = root.children[3]; root.children[3].children[2] = new Node(53); root.children[3].children[2].parent = root.children[3]; root.children[3].children[3] = new Node(54); root.children[3].children[3].parent = root.children[3]; root.children[3].children[0].children = new Node[2]; root.children[3].children[0].children[0] = new Node(25); root.children[3].children[0].children[0].parent = root.children[3].children[0]; root.children[3].children[0].children[1] = new Node(26); root.children[3].children[0].children[1].parent = root.children[3].children[0]; root.children[3].children[3].children = new Node[1]; root.children[3].children[3].children[0] = new Node(27); root.children[3].children[3].children[0].parent = root.children[3].children[3]; } private Node findNode(Node root, int value) { if (root == null) { return null; } if (root.data == value) { return root; } for (int i = 0; i < root.children.length; i++) { Node found = findNode(root.children[i], value); if (found != null) { return found; } } return null; } public void LCA(int node1, int node2) { Node n1 = findNode(root, node1); Node n2 = findNode(root, node2); Set<Node> ancestors = new HashSet<Node>(); while (n1 != null) { ancestors.add(n1); n1 = n1.parent; } while (n2 != null) { if (ancestors.contains(n2)) { System.out.println("Found common ancestor between " + node1 + " and " + node2 + ": node " + n2.data); return; } n2 = n2.parent; } } public static void main(String[] args) { LCA tree = new LCA(); tree.LCA(33, 27); } } |
LyoKICogVG8gY2hhbmdlIHRoaXMgdGVtcGxhdGUsIGNob29zZSBUb29scyB8IFRlbXBsYXRlcwogKiBhbmQgb3BlbiB0aGUgdGVtcGxhdGUgaW4gdGhlIGVkaXRvci4KICovCnBhY2thZ2UgamF2YXByb2plY3RzOwoKaW1wb3J0IGphdmEudXRpbC5IYXNoU2V0OwppbXBvcnQgamF2YS51dGlsLlNldDsKCi8qKgogKgogKi8KcHVibGljIGNsYXNzIExDQSB7CgogICAgcHJpdmF0ZSBjbGFzcyBOb2RlIHsKCiAgICAgICAgaW50IGRhdGE7CiAgICAgICAgTm9kZVtdIGNoaWxkcmVuID0gbmV3IE5vZGVbMF07CiAgICAgICAgTm9kZSBwYXJlbnQ7CgogICAgICAgIHB1YmxpYyBOb2RlKCkgewogICAgICAgIH0KCiAgICAgICAgcHVibGljIE5vZGUoaW50IHYpIHsKICAgICAgICAgICAgZGF0YSA9IHY7CiAgICAgICAgfQoKICAgICAgICBAT3ZlcnJpZGUKICAgICAgICBwdWJsaWMgYm9vbGVhbiBlcXVhbHMoT2JqZWN0IG90aGVyKSB7CiAgICAgICAgICAgIGlmICh0aGlzLmRhdGEgPT0gKChOb2RlKSBvdGhlcikuZGF0YSkgewogICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgIH0KICAgIH0KICAgIHByaXZhdGUgTm9kZSByb290OwoKICAgIHB1YmxpYyBMQ0EoKSB7CiAgICAgICAgcm9vdCA9IG5ldyBOb2RlKDMpOwoKICAgICAgICByb290LmNoaWxkcmVuID0gbmV3IE5vZGVbNF07CiAgICAgICAgcm9vdC5jaGlsZHJlblswXSA9IG5ldyBOb2RlKDE1KTsKICAgICAgICByb290LmNoaWxkcmVuWzBdLnBhcmVudCA9IHJvb3Q7CiAgICAgICAgcm9vdC5jaGlsZHJlblsxXSA9IG5ldyBOb2RlKDQwKTsKICAgICAgICByb290LmNoaWxkcmVuWzFdLnBhcmVudCA9IHJvb3Q7CiAgICAgICAgcm9vdC5jaGlsZHJlblsyXSA9IG5ldyBOb2RlKDEwMCk7CiAgICAgICAgcm9vdC5jaGlsZHJlblsyXS5wYXJlbnQgPSByb290OwogICAgICAgIHJvb3QuY2hpbGRyZW5bM10gPSBuZXcgTm9kZSgxMCk7CiAgICAgICAgcm9vdC5jaGlsZHJlblszXS5wYXJlbnQgPSByb290OwoKICAgICAgICByb290LmNoaWxkcmVuWzBdLmNoaWxkcmVuID0gbmV3IE5vZGVbM107CiAgICAgICAgcm9vdC5jaGlsZHJlblswXS5jaGlsZHJlblswXSA9IG5ldyBOb2RlKDIyKTsKICAgICAgICByb290LmNoaWxkcmVuWzBdLmNoaWxkcmVuWzBdLnBhcmVudCA9IHJvb3QuY2hpbGRyZW5bMF07CiAgICAgICAgcm9vdC5jaGlsZHJlblswXS5jaGlsZHJlblsxXSA9IG5ldyBOb2RlKDExKTsKICAgICAgICByb290LmNoaWxkcmVuWzBdLmNoaWxkcmVuWzFdLnBhcmVudCA9IHJvb3QuY2hpbGRyZW5bMF07CiAgICAgICAgcm9vdC5jaGlsZHJlblswXS5jaGlsZHJlblsyXSA9IG5ldyBOb2RlKDk5KTsKICAgICAgICByb290LmNoaWxkcmVuWzBdLmNoaWxkcmVuWzJdLnBhcmVudCA9IHJvb3QuY2hpbGRyZW5bMF07CgogICAgICAgIHJvb3QuY2hpbGRyZW5bMl0uY2hpbGRyZW4gPSBuZXcgTm9kZVsyXTsKICAgICAgICByb290LmNoaWxkcmVuWzJdLmNoaWxkcmVuWzBdID0gbmV3IE5vZGUoMTIwKTsKICAgICAgICByb290LmNoaWxkcmVuWzJdLmNoaWxkcmVuWzBdLnBhcmVudCA9IHJvb3QuY2hpbGRyZW5bMl07CiAgICAgICAgcm9vdC5jaGlsZHJlblsyXS5jaGlsZHJlblsxXSA9IG5ldyBOb2RlKDMzKTsKICAgICAgICByb290LmNoaWxkcmVuWzJdLmNoaWxkcmVuWzFdLnBhcmVudCA9IHJvb3QuY2hpbGRyZW5bMl07CgogICAgICAgIHJvb3QuY2hpbGRyZW5bM10uY2hpbGRyZW4gPSBuZXcgTm9kZVs0XTsKICAgICAgICByb290LmNoaWxkcmVuWzNdLmNoaWxkcmVuWzBdID0gbmV3IE5vZGUoNTEpOwogICAgICAgIHJvb3QuY2hpbGRyZW5bM10uY2hpbGRyZW5bMF0ucGFyZW50ID0gcm9vdC5jaGlsZHJlblszXTsKICAgICAgICByb290LmNoaWxkcmVuWzNdLmNoaWxkcmVuWzFdID0gbmV3IE5vZGUoNTIpOwogICAgICAgIHJvb3QuY2hpbGRyZW5bM10uY2hpbGRyZW5bMV0ucGFyZW50ID0gcm9vdC5jaGlsZHJlblszXTsKICAgICAgICByb290LmNoaWxkcmVuWzNdLmNoaWxkcmVuWzJdID0gbmV3IE5vZGUoNTMpOwogICAgICAgIHJvb3QuY2hpbGRyZW5bM10uY2hpbGRyZW5bMl0ucGFyZW50ID0gcm9vdC5jaGlsZHJlblszXTsKICAgICAgICByb290LmNoaWxkcmVuWzNdLmNoaWxkcmVuWzNdID0gbmV3IE5vZGUoNTQpOwogICAgICAgIHJvb3QuY2hpbGRyZW5bM10uY2hpbGRyZW5bM10ucGFyZW50ID0gcm9vdC5jaGlsZHJlblszXTsKCiAgICAgICAgcm9vdC5jaGlsZHJlblszXS5jaGlsZHJlblswXS5jaGlsZHJlbiA9IG5ldyBOb2RlWzJdOwogICAgICAgIHJvb3QuY2hpbGRyZW5bM10uY2hpbGRyZW5bMF0uY2hpbGRyZW5bMF0gPSBuZXcgTm9kZSgyNSk7CiAgICAgICAgcm9vdC5jaGlsZHJlblszXS5jaGlsZHJlblswXS5jaGlsZHJlblswXS5wYXJlbnQgPSByb290LmNoaWxkcmVuWzNdLmNoaWxkcmVuWzBdOwogICAgICAgIHJvb3QuY2hpbGRyZW5bM10uY2hpbGRyZW5bMF0uY2hpbGRyZW5bMV0gPSBuZXcgTm9kZSgyNik7CiAgICAgICAgcm9vdC5jaGlsZHJlblszXS5jaGlsZHJlblswXS5jaGlsZHJlblsxXS5wYXJlbnQgPSByb290LmNoaWxkcmVuWzNdLmNoaWxkcmVuWzBdOwoKICAgICAgICByb290LmNoaWxkcmVuWzNdLmNoaWxkcmVuWzNdLmNoaWxkcmVuID0gbmV3IE5vZGVbMV07CiAgICAgICAgcm9vdC5jaGlsZHJlblszXS5jaGlsZHJlblszXS5jaGlsZHJlblswXSA9IG5ldyBOb2RlKDI3KTsKICAgICAgICByb290LmNoaWxkcmVuWzNdLmNoaWxkcmVuWzNdLmNoaWxkcmVuWzBdLnBhcmVudCA9IHJvb3QuY2hpbGRyZW5bM10uY2hpbGRyZW5bM107CiAgICB9CgogICAgcHJpdmF0ZSBOb2RlIGZpbmROb2RlKE5vZGUgcm9vdCwgaW50IHZhbHVlKSB7CiAgICAgICAgaWYgKHJvb3QgPT0gbnVsbCkgewogICAgICAgICAgICByZXR1cm4gbnVsbDsKICAgICAgICB9CiAgICAgICAgaWYgKHJvb3QuZGF0YSA9PSB2YWx1ZSkgewogICAgICAgICAgICByZXR1cm4gcm9vdDsKICAgICAgICB9CiAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCByb290LmNoaWxkcmVuLmxlbmd0aDsgaSsrKSB7CiAgICAgICAgICAgIE5vZGUgZm91bmQgPSBmaW5kTm9kZShyb290LmNoaWxkcmVuW2ldLCB2YWx1ZSk7CiAgICAgICAgICAgIGlmIChmb3VuZCAhPSBudWxsKSB7CiAgICAgICAgICAgICAgICByZXR1cm4gZm91bmQ7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgcmV0dXJuIG51bGw7CiAgICB9CgogICAgcHVibGljIHZvaWQgTENBKGludCBub2RlMSwgaW50IG5vZGUyKSB7CiAgICAgICAgTm9kZSBuMSA9IGZpbmROb2RlKHJvb3QsIG5vZGUxKTsKICAgICAgICBOb2RlIG4yID0gZmluZE5vZGUocm9vdCwgbm9kZTIpOwogICAgICAgIFNldDxOb2RlPiBhbmNlc3RvcnMgPSBuZXcgSGFzaFNldDxOb2RlPigpOwogICAgICAgIHdoaWxlIChuMSAhPSBudWxsKSB7CiAgICAgICAgICAgIGFuY2VzdG9ycy5hZGQobjEpOwogICAgICAgICAgICBuMSA9IG4xLnBhcmVudDsKICAgICAgICB9CiAgICAgICAgd2hpbGUgKG4yICE9IG51bGwpIHsKICAgICAgICAgICAgaWYgKGFuY2VzdG9ycy5jb250YWlucyhuMikpIHsKICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiRm91bmQgY29tbW9uIGFuY2VzdG9yIGJldHdlZW4gIiArIG5vZGUxICsgIiBhbmQgIiArIG5vZGUyICsgIjogbm9kZSAiICsgbjIuZGF0YSk7CiAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgIH0KICAgICAgICAgICAgbjIgPSBuMi5wYXJlbnQ7CiAgICAgICAgfQogICAgfQoKICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKICAgICAgICBMQ0EgdHJlZSA9IG5ldyBMQ0EoKTsKICAgICAgICB0cmVlLkxDQSgzMywgMjcpOwogICAgfQp9Cg==
Main.java:13: class LCA is public, should be declared in a file named LCA.java
public class LCA {
^
1 error
-
result: Compilation error (maybe you wish to see an example for Java)


