题目描述:给定一个二叉树和其中的一个结点,请找出中序遍历顺序的下一个结点并且返回。注意,树中的结点不仅包含左右子结点,同时包含指向父结点的指针。
中序遍历可以如下图所示:
解体思路:
分三种情况:
- 该节点pNode有右子树,那么下个节点是其右子树最左边的节点
- 该节点pNode没有右子树时
又可以分为两种情况:
(1)pNode其父节点右孩子时,返回的是其父节点的父节点。。。,直到其父节点的右孩子不再指向它
(2)pNode是其父节点的左孩子时,直接返回其父
python代码实现(有详解)
# -*- 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 pNode.right != None:
pNode = pNode.right
while pNode.left != None:
pNode = pNode.left
return pNode
#第二种情况中的第一种
while pNode.next != None and pNode.next.right == pNode:
pNode = pNode.next
#第二种情况中的第二种
return pNode.next