python实现二叉树的镜像、公共最低祖先、二叉查找树的搜索

关于二叉树的镜像问题:

思路是这样的:从根结点出发,先交换它的左节点和右节点,然后对左子树作镜像,再对右子树作镜像。代码如下:

def Mirror(root):
    if not root:
        return 
    root.left,root.right=root.right,root.left
    Mirror(root.left)
    Mirror(root.right)

关于寻找两个节点p和q的公共最低祖先问题:

思路如下:先进行遍历,将(节点:父节点)的值放入字典中,然后针对p,建立一个它的所有祖先的集合,然后判断q的祖先在不在这个集合中,在的话就输出q,代码如下:

def LowestParent(root,p,q):
    stack=[root]
    par_child={root:None}
    while stack:
        node=stack.pop()
        if node.left:
            par_child[node.left]=node
            stack.append(node.left)
        if node.right:
            par_child[node.right]=node
            stack.append(node.right)
    res=set()
    while p:
        res.add(p)
        p=par_child[p]
    while q not in res:
        q=par_child[q]
    return q
        


二叉查找树的搜索问题:

本质是遍历该树找到某个值,由于二叉查找树的特性,即左节点的值<根结点的值<右节点的值,故遍历更为简单,代码如下:

def Search(root,parent,data):
    if not root:
        return False,root,parent
    if root.val==data:
        return True,root,parent
    if root.val<data:
        return Search(root.right,root,data)
    if root.val>data:
        return Search(root.left,root,data)

二叉查找树的插入问题:

思想是这样的:利用二叉查找树的搜索来锁定最后一个查找的位置,如果要插入的值大于该位置的值,则插入该节点为右节点,否则插入为左节点。

def Insert(data):
    flag,n,p=Search(root,root,data)
    if flag==False:
        new_Node=TreeNode(data)
        if data>p.val:
            p.right=new_Node
        if data<p.val:
            p.left=new_Node
    


  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值