求二叉树中两个结点的最近公共祖先

在二叉搜索树中找到两个节点的最近公共祖先。当节点大于两个目标节点,祖先在左子树;当节点小于两个目标节点,祖先在右子树。对于普通二叉树和没有父节点指针的树,可以转换问题来解决。
摘要由CSDN通过智能技术生成

1、该二叉树为二叉搜索树。
这里写图片描述

二叉搜索树:如果左子树存在,其结点都比父结点小,如果右子树存在,其结点都比父结点大。

故从根结点开始与两个输入结点比较:
如果当前结点大于这两个结点时,那么这两个结点的最近公共祖先一定在当前结点的左子树中;
如果当前结点小于这两个结点时,那么这两个结点的最近公共祖先一定在当前结点的右子树中。

参考代码:

Node<T>* _GetlastcommonNode(Node<T>* root, int val1, int val2)
    {
        assert(root);
        Node<T>* Cur = root;
        while (Cur)
        {
            //当前结点大于这两个结点,故在左子树中找
            if (Cur->_val > val1&&Cur->_val > val2)
                Cur = Cur->_left;
        
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值