# LeetCode2096: Step-By-Step Directions From a Binary Tree Node to Another

`/** * Definition for a binary tree node. * public class TreeNode { *     int val; *     TreeNode left; *     TreeNode right; *     TreeNode() {} *     TreeNode(int val) { this.val = val; } *     TreeNode(int val, TreeNode left, TreeNode right) { *         this.val = val; *         this.left = left; *         this.right = right; *     } * } */class Solution {    StringBuilder path = new StringBuilder("");    public String getDirections(TreeNode root, int startValue, int destValue) {        getStringfromRootToNode(root, startValue);        StringBuilder start = path.reverse();        path=new StringBuilder("");        getStringfromRootToNode(root, destValue);        StringBuilder dest= path.reverse();        removeCommonPrefix(start,dest);        replaceStartString(start);        return concatinateStrings(start,dest);            }        public Boolean getStringfromRootToNode(TreeNode root , int value){        // return reverse strings from root to valueNode        if(root.val==value) return true;        if(root.left!=null && getStringfromRootToNode(root.left,value)) {            path.append("L");           return true;         }        if(root.right!=null && getStringfromRootToNode(root.right,value)) {            path.append("R");            return true;        }        return false;              }        public void removeCommonPrefix(StringBuilder s1, StringBuilder s2){        //remove common prefix         while(s1.length()!=0 && s2.length()!=0             && s1.charAt(0)==s2.charAt(0)){            s1.deleteCharAt(0);            s2.deleteCharAt(0);                    }    }        public void replaceStartString( StringBuilder s){        int i=0;        while(i<s.length()){            s.setCharAt(i,'U');                i++;        }    }            public String concatinateStrings(StringBuilder s1, StringBuilder s2){        //concatinate s1 with Us and reversed s2        s1.append(s2);        return s1.toString();    }    }`