题目:
给定一个二叉树和其中的一个结点,请找出中序遍历顺序的下一个结点并且返回。注意,树中的结点不仅包含左右
子结点,同时包含指向父结点的指针。
1. 思路
(1) 若该节点存在右子树:则下一个节点为右子树最左子节点
(2) 若该节点不存在右子树:这时分两种情况:
2.1 该节点为父节点的左子节点,则下一个节点为其父节点
2.2 该节点为父节点的右子节点,则沿着父节点向上遍历,直到找到一个节点,它的父节点的左子节点为它本身
2. 代码
class treeNode:
def __init__(self):
self.left = None
self.right = None
self.father = None
class Solution:
def solution(self,p):
if not p:
return
if p.right != None:
p = p.right
while p.left !=None:
p = p.left
return p
elif p.right == None and p.father!=None:
q = p.father
if p == q.left:
return q
if p == q.right:
while q!=None:
s = q.father
if q == s.left:
return s
q = q.father
else:
return None # 如果为根节点,右子树又不存在的情况,那么此根节点就是最后一个节点
return None