题目描述
给定一个二叉树和其中的一个结点,请找出中序遍历顺序的下一个结点并且返回。注意,树中的结点不仅包含左右子结点,同时包含指向父结点的指针。
# -*- 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
疑惑点1:
在TreeLinkNode中的self.next实际上指的是当前结点的父节点,这里的next改成parent其实更易理解
疑惑点2:
在定义的方法中只给定了一个pNode结点,没有给定二叉树的根节点pRoot。
关于这一点,已知pNode的父节点为pNode.next,那么可以使用while循环,当遍历到pNode.next==null的时候说明该节点为二叉树的根节点,所以题目中只给出了 当前结点pNode
三种情况
1、二叉树为空,则返回空
2、当前结点的右孩子存在,则设置一个指针从该节点的右孩子出发
3、该节点不存在右子树,则分为两种情况:
如果该节点是其父节点的左子节点,则返回父节点。这个根据中序遍历顺序的特性【左|根|右】很好理解
如果该节点是其父节点的右子节点,