给定一个二叉树和其中的一个结点,请找出中序遍历顺序的下一个结点并且返回。注意,树中的结点不仅包含左右子结点,同时包含指向父结点的指针。
- 解题思路:
三种情况:
- 一个节点(Node)有右子树,那么中序遍历下一个节点就是这个右子树的左子节点
- 一个节点(···)没有右子树且它是父节点的右子树,这种情况比较复杂,需要指向父节点的指针一直向上遍历,直到这个父节点是它父节点的左子树,那么中序遍历下一个节点就是这个父节点的父节点(略拗口)
- 一个节点(···)没有右子树且它是父节点左子树,那么中序遍历下一个节点就是这个节点的父节点
(详见剑指offer P65页)
class TreeLinkNode:
def __init__(self,val):
self.val = val
self.left = None
self.right = None
self.next = None
class solution:
def next_node(self,Node):
if not None:
return None
elif Node.right != None:
Node = Node.right#指针的移动
while Node.left!= None:
Node = Node.left
return Node
elif Node.next!= None and Node.next.right == Node:
while Node.next!= None and Node.next.left != None:
Node = Node.next
return Node.next
else:
return Node.next