【题目】
【代码】
# Definition for a binary tree node.
# class TreeNode:
# def __init__(self, val=0, left=None, right=None):
# self.val = val
# self.left = left
# self.right = right
class Solution:
def __init__(self):
self.ans=None
self.pa_cnt=0
self.start_depth=-1
self.end_depth=-1
self.common_node_depth=0
self.res=""
self.dest_path=""
self.path=[]
def dfs(self,root,startValue,destValue,level=0,loc=0):
if not root:
return False
self.path.append(loc)
l=self.dfs(root.left,startValue,destValue,level+1,'L')
r=self.dfs(root.right,startValue,destValue,level+1,'R')
if root.val==startValue:
self.start_depth=level
if root.val==destValue:
self.end_depth=level
self.dest_path=self.path[:]
if (l and r) or ((root.val==startValue or root.val==destValue) and (l or r)):
self.common_node_depth=level
self.ans=root
self.path.pop()
return l or r or (root.val==startValue or root.val==destValue)
def getDirections(self, root: Optional[TreeNode], startValue: int, destValue: int) -> str:
ans=self.dfs(root,startValue,destValue)
self.pa_cnt=self.start_depth-self.common_node_depth
return "U"*self.pa_cnt+"".join(self.dest_path[1+self.common_node_depth:])
【方法2】
# Definition for a binary tree node.
# class TreeNode:
# def __init__(self, val=0, left=None, right=None):
# self.val = val
# self.left = left
# self.right = right
class Solution:
def dfs(self,root,loc=0):
if not root:return
self.path.append(root.val)
self.path_loc.append(loc)
if root.val==self.destValue:
self.path_dest=self.path[:]
self.path_dest_loc=self.path_loc[:]
if root.val==self.startValue:
self.path_start=self.path[:]
self.dfs(root.left,-1)
self.dfs(root.right,1)
self.path.pop()
self.path_loc.pop()
def getDirections(self, root: Optional[TreeNode], startValue: int, destValue: int) -> str:
self.path,self.path_dest,self.path_start,self.path_dest_loc,self.path_loc=[],[],[],[],[]
self.startValue,self.destValue=startValue,destValue
self.dfs(root)
ans=""
dic={1:"R",-1:"L"}
index=0
for x,y in zip(self.path_start,self.path_dest):
if x!=y and ans=="":
break
index+=1
for i in range(len(self.path_dest)):
if i>=index:
ans+=dic[self.path_dest_loc[i]]
return "U"*(len(self.path_start)-index)+ans