'''
这个题目在LeetCode上是一道会员题目
所以这里就大致写一下思路和代码
了解后继节点的含义:一个节点的后继节点是指在中序遍历中,该节点的下一个节点 如遍历结果为ABCD 那么C的后继节点为D
o(n)算法
基本思路:
假设节点为o1 其对于的后继节点为o2
通过中序遍历,在遍历过程中将所有结果入字典,每次进行查找(o2)如果在该次查找中找到了o1那么o2就是其后继节点
o(k)算法
基本思路:
这个是需要新建一个父指针作为支撑的(就是说每一个节点都要有一个指向父节点的指针)
根据中序遍历的过程,可以对于后继节点可以分为两种情况
1.当前节点x有右子树
因为中序遍历的过程是 左中右 所以以当前节点x作为中,中遍历结束后开设遍历右边
而右边又可以拆分成左中所以一定会到达右子树的 <<<最左边>>>
2.当前节点无右子树
因为中序遍历是 左中右 而现在无右 那么肯定是会往上面(父节点方向,中)跑
并且他一定是在找到的后继节点(中)的左边
为什么呢?
因为左中右,他在右边就不会右后继节点
分为右后继节点和无后继节点两种情况
2.1 它可以找到在一个节点的左边,那么这个节点就是后继节点
2.2 他自己就在最右边,找不到后继节点
'''
def fun1(
09-15
251
09-14
165