Advertisement
sweet1cris

Untitled

Jan 9th, 2018
70
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 1.82 KB | None | 0 0
  1.  
  2. /**
  3.  * Definition of TreeNode:
  4.  * public class TreeNode {
  5.  *     public int val;
  6.  *     public TreeNode left, right;
  7.  *     public TreeNode(int val) {
  8.  *         this.val = val;
  9.  *         this.left = this.right = null;
  10.  *     }
  11.  * }
  12.  */
  13. class ResultType {
  14.     public boolean a_exist, b_exist;
  15.     public TreeNode node;
  16.     ResultType(boolean a, boolean b, TreeNode n) {
  17.         a_exist = a;
  18.         b_exist = b;
  19.         node = n;
  20.     }
  21. }
  22.  
  23. public class Solution {
  24.     /**
  25.      * @param root The root of the binary tree.
  26.      * @param A and B two nodes
  27.      * @return: Return the LCA of the two nodes.
  28.      */
  29.     public TreeNode lowestCommonAncestor3(TreeNode root, TreeNode A, TreeNode B) {
  30.         // write your code here
  31.         ResultType rt = helper(root, A, B);
  32.         if (rt.a_exist && rt.b_exist)
  33.             return rt.node;
  34.         else
  35.             return null;
  36.     }
  37.  
  38.     public ResultType helper(TreeNode root, TreeNode A, TreeNode B) {
  39.         if (root == null)
  40.             return new ResultType(false, false, null);
  41.            
  42.         ResultType left_rt = helper(root.left, A, B);
  43.         ResultType right_rt = helper(root.right, A, B);
  44.        
  45.         boolean a_exist = left_rt.a_exist || right_rt.a_exist || root == A;
  46.         boolean b_exist = left_rt.b_exist || right_rt.b_exist || root == B;
  47.        
  48.         if (root == A || root == B)
  49.             return new ResultType(a_exist, b_exist, root);
  50.  
  51.         if (left_rt.node != null && right_rt.node != null)
  52.             return new ResultType(a_exist, b_exist, root);
  53.         if (left_rt.node != null)
  54.             return new ResultType(a_exist, b_exist, left_rt.node);
  55.         if (right_rt.node != null)
  56.             return new ResultType(a_exist, b_exist, right_rt.node);
  57.  
  58.         return new ResultType(a_exist, b_exist, null);
  59.     }
  60. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement