题目描述
给定一个二叉树和其中的一个结点,请找出中序遍历顺序的下一个结点并且返回。注意,树中的结点不仅包含左右子结点,同时包含指向父结点的指针。
python实现:
# -*- coding:utf-8 -*-
# class TreeLinkNode:
# def __init__(self, x):
# self.val = x
# self.left = None
# self.right = None
# self.next = None
class Solution:
"""
1.如果当前节点有right,那么next节点是其右子树的最左边的节点
2.如果当前节点没有right,但他是其父亲的left,那么next节点是其父亲
3.如果当前节点没有right,但他是其父亲的right,那么next节点是其父亲开始再往上方找,
直到找到某个节点是其父亲的left,那么这个父亲节点就是所求next,如果没有这样的节点,
这next为None
"""
def GetNext(self, pNode):
# write code here
if pNode is None:
return None
if pNode.right:
p = pNode.right
while p.left:
p = p.left
return p
else:
if pNode.next is None:#没有父节点
return None
else:
if pNode == pNode.next.left:
return pNode.next
elif pNode == pNode.next.right:
p = pNode.next
while p and p.next:
if p==p.next.left:
return p.next
else:
p = p.next
return None