题目描述
给定一个二叉树和其中的一个结点,请找出中序遍历顺序的下一个结点并且返回。注意,树中的结点不仅包含左右子结点,同时包含指向父结点的指针。
思路
中序遍历:左根右
- 如果该节点有右子树,就一直遍历它的右子树中的左结点
- 没有右子树,如果该结点是其父节点的左孩子,返回父节点。
- 如果不是,则返回其父节点继续向上查找
# -*- 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 None
if pNode.right:
pNode=pNode.right
while pNode.left:
pNode=pNode.left
return pNode
else:
while pNode.next:
if pNode==pNode.next.left:
return pNode.next
pNode=pNode.next
return None
测试用例
if __name__=='__main__':
s=Solution()
#构建二叉树
root=TreeLinkNode(1)
node1=TreeLinkNode(2)
node2=TreeLinkNode(3)
root.left=node1
node1.right=node2
node2.next=node1
node1.next=root
root.right=node1.left=node2.left=node2.right=None
#调用函数
nextnode=s.GetNext(node2)
print(nextnode.val)