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
| static class Info{ public Node ans; public boolean findNode1; public boolean findNode2;
public Info(Node ans, boolean findNode1, boolean findNode2) { this.ans = ans; this.findNode1 = findNode1; this.findNode2 = findNode2; } }
public static Info RF(Node head,Node node1,Node node2){ if(head == null){ return new Info(null,false,false); }
Info leftInfo = RF(head.left,node1,node2); Info rightInfo = RF(head.right,node1,node2);
boolean findNode1 = head == node1 || leftInfo.findNode1 || rightInfo.findNode1; boolean findNode2 = head == node2 || leftInfo.findNode2 || rightInfo.findNode2;
Node ans = null; if(leftInfo.ans != null){ ans = leftInfo.ans; } if (rightInfo.ans != null){ ans = rightInfo.ans; } if(ans == null){ if(findNode1 && findNode2){ ans = head; } }
return new Info(ans,findNode1,findNode2); }
public static Node RecentlyFatherTest2(Node head,Node node1,Node node2){ Info info = RF(head, node1, node2);
System.out.println(info.ans); return info.ans; }
|