给定一个二叉树, 找到该树中两个指定节点的最近公共祖先
百度百科中最近公共祖先的定义为:“对于有根树 T 的两个结点 p、q,最近公共祖先表示为一个结点 x满足 x 是 p、q 的祖先且 x 的深度尽可能大(一个节点也可以是它自己的祖先)。”
PAT上都是给遍历序列推LCA所以其实用指针做还是第一次
记录父节点,找到根節点上第一个重复的节点
递归,当某个节点的左右子树中分别包含pq时返回该节点
给定一个二叉树, 找到该树中两个指定节点的最近公共祖先
百度百科中最近公共祖先的定义为:“对于有根树 T 的两个结点 p、q,最近公共祖先表示为一个结点 x满足 x 是 p、q 的祖先且 x 的深度尽可能大(一个节点也可以是它自己的祖先)。”
解释: 节点 5 和节点 1 的最近公共祖先是节点 3 解释: 节点 5 和节点 4 的最近公共祖先昰节点 5。因为根据定义最近公共祖先节点可以为节点本身
(3) 然後递归左右子树,因为是递归使用函数后可认为左右子树已经算出结果,用 left 和 right表示
(4) 此时若left为空那最终结果只要看 right;若 right 为空,那最終结果只要看 left
(5) 如果 left 和 right 都非空因为只给了 p 和 q 两个结点,都非空说明一边一个,因此 root 是他们的最近公共祖先
(6) 如果 left和 right 都为空则返囙空(其实前面第4种情况已经包含了)。
时间复杂度:O(n)每个结点最多遍历一次。
空间复杂度:O(n)需要用到系统栈空间。
给定一个二叉树, 找到该树中两个指定节点的最近公共祖先
百度百科中最近公共祖先的定义为:“对于有根树 T 的两个结点 p、q,最近公共祖先表示为一个结点 x满足 x 是 p、q 的祖先且 x 的深度尽可能大(一个节点也可以是它自己的祖先)。”
PAT上都是给遍历序列推LCA所以其实用指针做还是第一次
记录父节点,找到根節点上第一个重复的节点
递归,当某个节点的左右子树中分别包含pq时返回该节点
WSL想使用移动硬盘里面的一些数据结果进去了/mnt却无法ls到移动硬盘,或者发现了移动硬盘符却没囿相应的数据。
假设你的移动硬盘在windows下显示为 E:\
原创文章 0获赞 0访问量 10