题解 | #二叉树的下一个结点#
二叉树的下一个结点
https://www.nowcoder.com/practice/9023a0c988684a53960365b889ceaf5e
python3,非递归法。
利用中序遍历的性质:
- 如果有右结点,中序遍历下一个就是右结点
- 如果没有右结点:
- 如果有父结点,且是父结点的左结点,返回父结点。
- 如果有父结点,且是父结点的右结点,则循环继续向上,寻找一个父结点让自己是左结点。循环到树的根为止。
- 没父结点,或者循环到根都没有找到合适的父结点,都返回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