给定一个二叉树和其中的一个结点,请找出中序遍历顺序的下一个结点并且返回。注意,树中的结点不仅包含左右子结点,同时包含指向父结点的指针。
题目:给定一个二叉树和其中的一个结点,请找出中序遍历顺序的下一个结点并且返回。注意,树中的结点不仅包含左右子结点,同时包含指向父结点的指针。
[1]如果给定的结点有右子树,那么这个结点的下一个结点就是它的右子树的最左子结点
[2]如果给定的结点没有右子树,且该结点是它的父结点的左子结点,那么该结点的下一个结点是就是它的父节点
[3]如果给定的结点既没有右子树,而且还是它的父结点的右子结点,则需要沿着该结点指向其父结点的指针一直向上遍历,直到找到一个结点是它父结点的左子结点的结点,否则该结点没有下一个结点
# -*- coding:utf-8 -*-
# class TreeLinkNode:
# def __init__(self, x):
# self.val = x
# self.left = None
# self.right = None
# self.next = None
class Solution:
def GetNext(self, pNode):
# write code here
if not pNode:
return None
if pNode.right:
res = pNode.right
while res.left:
res = res.left
return res
while pNode.next:
temp = pNode.next
if temp.left == pNode:
return temp
pNode = temp
return None