首页 > 其他分享 >LeetCode2096 从二叉树一个节点到另一个节点每一步的方向

LeetCode2096 从二叉树一个节点到另一个节点每一步的方向

时间:2022-09-25 17:35:29浏览次数:77  
标签:right cur val self LeetCode2096 二叉树 path 节点 left

LeetCode2096 从二叉树一个节点到另一个节点每一步的方向

最近公共祖先的变形题.

# 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 getDirections(self, root: Optional[TreeNode], startValue: int, destValue: int) -> str:

        father, s, t = {}, None, None
        def dfs(cur: TreeNode) -> None:

            nonlocal s, t

            if cur.val == startValue: s = cur
            if cur.val == destValue: t = cur

            if cur.left:
                father[cur.left] = cur
                dfs(cur.left)
            if cur.right:
                father[cur.right] = cur
                dfs(cur.right)
        
        dfs(root)

        def get_path(cur: TreeNode) -> List[str]:
            
            ret = []
            while cur != root:
                parent = father[cur]
                if cur == parent.left: ret.append('L')
                elif cur == parent.right: ret.append('R')
                cur = parent
            return ret[::-1]
        
        s_path, t_path = get_path(s), get_path(t)
        while s_path and t_path and s_path[0] == t_path[0]:
            s_path.pop(0), t_path.pop(0)
        
        ans = 'U' * len(s_path) + ''.join(t_path)
        return ans

标签:right,cur,val,self,LeetCode2096,二叉树,path,节点,left
From: https://www.cnblogs.com/solvit/p/16728300.html

相关文章

  • 代码随想录 两两交换链表中的节点(LeetCode 24), 删除链表的倒数第N个节点(LeetCode 1
    两两交换链表中的节点题目给定一个链表,两两交换其中相邻的节点,并返回交换后的链表。题目链接示例:题解对于奇数个节点,最后一个节点不交换。结束条件:对于奇数个节......
  • 二叉树遍历
    应用实例代码实现publicclassBinaryTreeDemo{ publicstaticvoidmain(String[]args){ //先需要创建一颗二叉树 BinaryTreebinaryTree=newBinary......
  • 二叉树
    数组存储方式的分析优点:通过下标方式访问元素,速度快。对于有序数组,还可使用二分查找提高检索速度。缺点:如果要检索具体某个值,或者插入值(按一定顺序)会整体移动,效率较......
  • 二叉树查找和删除指定结点
    二叉树查找指定的节点前序查找的思路1.先判断当前节点的no是否等于要查找的2.如果是相等,则返回当前节点3.如果不等,则判断当前节点的左子节点是否为空,如果不为空,则递归......
  • 代码随想录第四天| 24. 两两交换链表中的节点 、19.删除链表的倒数第N个节点 、160.链
    今天链表致死量第一题publicstaticclassListNode{intval;ListNodenext;ListNode(){}ListNode(intval){this.val=val;......
  • 力扣-226-翻转二叉树/剑指Offer-27-二叉树的镜像
    直达链接直观的想法:我可以遍历并重建,但也很明显效率低下,可能达到O(N2),但或许可能拿来当作练习,检查自己遍历/重建二叉树的基本功不过现在先想想有没有效率更高的解法,我觉......
  • 力扣106 构造二叉树
      class Solution {public:    TreeNode* buildTree(vector<int>& inorder, vector<int>& postorder) {    return reBuild(inorder, postorder);......
  • 力扣101 对称二叉树
        class Solution {public:    bool isSymmetric(TreeNode* root) {    if (root == nullptr)        return true;    retur......
  • JavaScript HTML DOM 节点列表
    NodeList 对象是一个从文档中获取的节点列表(集合)。所有浏览器的 childNodes 属性返回的是NodeList对象。大部分浏览器的 querySelectorAll() 返回NodeList......
  • JavaScript HTML DOM 元素 (节点)
    创建新的元素节点-appendChild():appendChild()方法:将元素添加到尾部创建新的元素节点-insertBefore():insertBefore()方法,将元素添加到开始位置移除已存在的元素:需要知......