[剑指offer]二叉树的下一个结点
题目描述
给定一个二叉树其中的一个结点,请找出中序遍历顺序的下一个结点并且返回。注意,树中的结点不仅包含左右子结点,同时包含指向父结点的next指针。
先画一个图:
该二叉树中序遍历的结果如上图所示:因此我们可以得到:
- 当前结点的右结点存在时,如果右节点的左节点不存在,则为该右节点;存在则一直去查找其左节点的左节点,直到其左节点为空时,下一个结点即为该结点。
- 当前结点的右节点不存在时,
- 如果当前结点的任意层父节点均不是整个二叉树的左节点部分,那么该节点的下一个结点为空;
- 如果当前结点是父节点的左节点,则下一个结点必为父节点。
- 如果当前结点是父节点的右节点时,当前结点的的第i层父节点存在第一个父节点的左节点为第i层父节点,则下一个结点为第i层父节点的父节点。
使用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: # 该节点的右子树存在时
tmp = pNode.right
while tmp:
result = tmp
tmp = tmp.left
return result
# 该结点没有右子树
while pNode:
if pNode.next:
if pNode.next.left == pNode:
return pNode.next
pNode = pNode.next
else:
return None