python3,非递归法。
利用中序遍历的性质:
  1. 如果有右结点,中序遍历下一个就是右结点
  2. 如果没有右结点:
  • 如果有父结点,且是父结点的左结点,返回父结点。
  • 如果有父结点,且是父结点的右结点,则循环继续向上,寻找一个父结点让自己是左结点。循环到树的根为止。
  • 没父结点,或者循环到根都没有找到合适的父结点,都返回None
class Solution:
    def GetNext(self, pNode):
        if pNode.right:
            a = pNode.right
            while a.left:
                a = a.left
            return a
        
        if pNode.next and pNode.next.left == pNode:
            return pNode.next
        
        
        while pNode.next:        
            if pNode.next.left == pNode:
                return pNode.next      
            pNode = pNode.next
        
        return None