二叉搜索树 最近共同祖先 c++_【每日编程82期】二叉搜索树的最近公共祖先

每日编程中遇到任何疑问、意见、建议请公众号留言或直接撩Q474356284(备注每日编程)

今日问题:

给定一个二叉搜索树, 找到该树中两个指定节点的最近公共祖先。

百度百科中最近公共祖先的定义为:“对于有根树 T 的两个结点 p、q,最近公共祖先表示为一个结点 x,满足 x 是 p、q 的祖先且 x 的深度尽可能大(一个节点也可以是它自己的祖先)。”

例如,给定如下二叉搜索树:  root= [6,2,8,0,4,7,9,null,null,3,5]

8e60427b4a27efdfb652c7002c60fe41.png

示例 1:

输入: root =[6,2,8,0,4,7,9,null,null,3,5], p = 2, q = 8

输出: 6

解释: 节点2 和节点8 的最近公共祖先是6。

示例 2:

输入: root =[6,2,8,0,4,7,9,null,null,3,5], p = 2, q = 4

输出: 2

解释: 节点2和节点4的最近公共祖先是2, 因为根据定义最近公共祖先节点可以为节点本身。

说明:

  • 所有节点的值都是唯一的。

  • p、q 为不同节点且均存在于给定的二叉搜索树中。


解决方法:

首先让我们来回顾一下二叉搜索树的特性,即

左子树的数值

(node ->left -> val) < (node -> val) < (node -> right -> val)

递归和迭代

C++代码:

7566eb562326490729c8227110e9cdf2.png

9ef6c69bd762de379b746844f96af623.png

C代码:

1dff632d15cafa4b13aabb037e23e657.png

c25ecd49684347533c16b634145332be.png

Java代码:

af9999bb7260c955438b09f3a4a1092a.png

6881b98c73723d8e90cb5fd074fde31a.png


明日题目预告:

二叉树剪枝

给定二叉树根结点 root ,此外树的每个结点的值要么是 0,要么是 1。

返回移除了所有不包含 1 的子树的原二叉树。

( 节点 X 的子树为 X 本身,以及所有 X 的后代。)

示例1:

输入:[1,null,0,0,1]

输出: [1,null,0,null,1]

解释:

只有红色节点满足条件“所有不包含 1 的子树”。

右图为返回的答案。

e93eacdab711996caf45f9671a2560df.png

示例2:

输入:[1,0,1,0,0,0,1]

输出: [1,null,1,null,1]

486980a3e9047294dce753446e95b9d1.png

示例3:

输入:[1,1,0,1,1,0,1,0]

输出: [1,1,0,1,1,null,1]

cb6380396fb7122a52693be76d21e704.png


更多编程题。

请至首页->每日系列->每日编程

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值