【二叉树-中等】2096. 从二叉树一个节点到另一个节点每一步的方向

题目
【代码】
在这里插入图片描述

# 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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值