题目描述
给定一个二叉树和其中的一个结点,请找出中序遍历顺序的下一个结点并且返回。注意,树中的结点不仅包含左右子结点,同时包含指向父结点的指针。
中序遍历 左根右
把当前节点看作根,左边不用管
考虑当前节点有右结点的情况,则下一个结点是右结点的最左一个结点,如3,右结点是4,如5,右结点的最左是6
if pNode.right:
cur = pNode.right
while cur.left:
cur = cur.left
return cur
如果当前结点没有右结点,上图1,4,6,9的情况
如有父节点且是父节点的左结点如1,6,则返回父节点,如果不是,则再往上找看父节点是不是爷爷节点的左,是左则返回爷爷结点,如4返回5,如果是右则再往上找,如果找到没有父节点了则返回null
# -*- 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
if pNode.right:
cur = pNode.right
while cur.left:
cur = cur.left
return cur
else:
while pNode.next:
if pNode == pNode.next.left:
return pNode.next
pNode = pNode.next
return