510.二叉搜索树的中序后继2

'''
    这个题目在LeetCode上是一道会员题目
    所以这里就大致写一下思路和代码

    了解后继节点的含义:一个节点的后继节点是指在中序遍历中,该节点的下一个节点 如遍历结果为ABCD 那么C的后继节点为D

    o(n)算法
    基本思路:
        假设节点为o1  其对于的后继节点为o2
        通过中序遍历,在遍历过程中将所有结果入字典,每次进行查找(o2)如果在该次查找中找到了o1那么o2就是其后继节点

    o(k)算法
    基本思路:
        这个是需要新建一个父指针作为支撑的(就是说每一个节点都要有一个指向父节点的指针)
        根据中序遍历的过程,可以对于后继节点可以分为两种情况
        1.当前节点x有右子树
            因为中序遍历的过程是 左中右 所以以当前节点x作为中,中遍历结束后开设遍历右边
            而右边又可以拆分成左中所以一定会到达右子树的   <<<最左边>>>

        2.当前节点无右子树
            因为中序遍历是 左中右 而现在无右  那么肯定是会往上面(父节点方向,中)跑
            并且他一定是在找到的后继节点(中)的左边
             为什么呢?
                因为左中右,他在右边就不会右后继节点
            分为右后继节点和无后继节点两种情况
            2.1  它可以找到在一个节点的左边,那么这个节点就是后继节点
            2.2  他自己就在最右边,找不到后继节点
'''

def fun1(
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值