Python——数据结构——树——二叉树——二叉排序树的任意两个结点间的最低公共祖先

1.问题描述

传入两个节点的值,求两个节点之间的最低的公共祖先。

2.解题思路

  1. 查找第一个值对应的节点,并把途径的所有节点存储到列表p1中
  2. 查找第二个值对应的结点,并把途径的所有节点存储到列表p2中
  3. 比较列p1和p2的元素的节点值,值不同的节点的前一个节点便是最低公共祖先节点

3.代码如下

from treeNode import sortTree

#!/usr/bin/python
# -*- coding: UTF-8 -*-
"""
@author:cfl
@file:求二叉排序树任意两个结点之间的最低公共祖先.py
@time:2022/01/05
@software:PyCharm
"""

from treeNode import sortTree

# 寻找值对应的结点,把途径的结点值放到列表中
def lookup(tree,v):
    lst=[]
    node=tree.root
    for i in range(tree.length):
        lst.append(node)
        if v<node.data:           # 向左查找
            if node.left!=None:
                node=node.left
            else:
                return None
        elif v>node.data:
            if node.right!=None:
                node=node.right
            else:
                return None
        else:
            return lst

def main():
    sTree=sortTree()
    for i in [10, 6, 15, 9, 3, 13, 7, 16, 8]:
        sTree.add(i)

    lst1=lookup(sTree,8)
    lst2=lookup(sTree,13)
    try:
        commonNode=None
        for i in range(min(len(lst1),len(lst2))):
            if lst1[i]!=lst2[i]:
                break
            commonNode=lst1[i]
        if commonNode!=None:
            print('最低共同祖先:',commonNode.data)
        else:
            # 不在同一个树上才会找不到最低共同祖先
            print('找不到最低共同祖先')
    except:
        print('请确认要查找的值是否在二叉排序树中')


if __name__ == '__main__':
    main()

4.结果展示

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

同学陈

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值