题目:给定一个二叉树其中的一个结点(此节点可以为二叉树任意一个节点),请找出中序遍历顺序的下一个结点并且返回。注意,树中的结点不仅包含左右子结点,同时包含指向父结点的指针。
此二叉树的中序遍历为:8、4、9、2、10、5、1、6、3、7
思路:
(1)如果此结点有右结点:返回 此结点的右结点 的最左的结点(例如4、2)
(2)如果此结点没有右结点:(1)此结点为根节点:返回None
(2)此结点为上一个结点的左节点:返回上一个结点(例如结点6、8)
(3)此结点为上一个结点的右节点:(1)此结点在根的左侧:返回上一个结点的上一个结点(例如结点9)
(2)此结点在根的右侧:返回None(例如结点7)
1 # -*- coding:utf-8 -*- 2 # class TreeLinkNode: 3 # def __init__(self, x): 4 # self.val = x 5 # self.left = None 6 # self.right = None 7 # self.next = None 8 class Solution: 9 def GetNext(self, pNode): 10 # write code here 11 #如果有右结点:返回右结点的最左 12 if pNode.right: 13 n = pNode.right 14 while n.left: 15 n = n.left 16 return n 17 #如果没有右结点 18 else: 19 #如果为根结点 20 if pNode.next == None: 21 return None 22 #如果此结点为上一个节点的左结点 23 if pNode.next.left == pNode: 24 #返回上一个结点 25 return pNode.next 26 #如果此结点为上一个节点的右结点 27 else: 28 n = pNode 29 #找上一个结点的上一个结点 30 while n.next.next: 31 n = n.next 32 if n.next.left == n: 33 return pNode.next.next#这里很重要!返回的是上一个结点的上一个结点 34 else: 35 return None
原文地址:https://www.cnblogs.com/baibaibaiyou/p/8575283.html
时间: 2024-10-25 05:18:07