# 2096. Step-By-Step Directions From a Binary Tree Node to Another ###### tags: `Leetcode` `Medium` `Tree` `LCA` Link: https://leetcode.com/problems/step-by-step-directions-from-a-binary-tree-node-to-another/ ## 思路 思路参考[这里](https://leetcode.com/problems/step-by-step-directions-from-a-binary-tree-node-to-another/discuss/1612105/3-Steps) 1. 先找到从root到value点的路径怎么走 Say we get "LLRRL" and "LRR". 2. 把两个字符串反转过来(才是真正从root到目标点的路径) 找到commonpath 因为那是到start和dest都要走的路径 We remove "L", and now start direction is "LRRL", and destination - "RR" 3. Replace all steps in the start direction to "U" and add destination direction. The result is "UUUU" + "RR". 没有直接用lca模版的原因是它需要知道从root到每个node的路径 也就是他需要从上至下的信息 而不是从下至上的 但是找lca的过程是从下至上的 (下面的child node告诉你它的subtree有没有target node) 直接用lca会比较麻烦 ## Code ```java= class Solution { //other solutions private boolean findNode(TreeNode root, int value, StringBuilder sb){ if(root.val==value) return true; if(root.left!=null && findNode(root.left, value, sb)){ sb.append('L'); return true; } else if(root.right!=null && findNode(root.right, value, sb)){ sb.append('R'); return true; } return false; } public String getDirections(TreeNode root, int startValue, int destValue) { StringBuilder start = new StringBuilder(); StringBuilder dest = new StringBuilder(); findNode(root, startValue, start); findNode(root, destValue, dest); start = start.reverse(); dest = dest.reverse(); int commonIdx = -1; for(int i=0; i<Math.min(start.length(), dest.length()); i++){ if(start.charAt(i)==dest.charAt(i)) commonIdx = i; else break; } return "U".repeat(start.length()-commonIdx-1)+dest.substring(commonIdx+1); } } ```