思路:
分析二叉树的下一个节点,一共有以下情况:
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 pNode
if pNode.right:#当前结点为根节点且存在右结点,则找其右结点的最左孩子并返回
left1=pNode.right
while left1.left:
left1=left1.left
return left1
while pNode.next:#当前结点为左结点且不存在右结点,则找其父节点。
tmp=pNode.next
if tmp.left==pNode:
return tmp
pNode=tmp