题目:
给定一个二叉树和其中的一个结点,请找出中序遍历顺序的下一个结点并且返回。注意,树中的结点不仅包含左右子结点,同时包含指向父结点的指针。
思路:
见书P65
# -*- 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 # 如果一个节点有右子树 elif pNode.right is not None: pNode = pNode.right while pNode.left is not None: # 那么它的下一个节点,就是它右子树的最左节点 pNode = pNode.left return pNode # 如果一个节点没有右子树,且它还是它父节点的右子节点 elif pNode.next is not None and pNode.next.right == pNode: # 沿着父节点的指针向上遍历,找到一个是它父节点的左子节点的节点 while pNode.next is not None and pNode.next.left != pNode: pNode = pNode.next # 若存在,则该节点的父节点就是下一个节点 return pNode.next # 如果一个节点没有右子树,且它还是它父节点的左子节点 else: # 它的下一个节点为它的父节点 return pNode.next
用例:
- 完全二叉树、不完全二叉树
- 特殊二叉树:所有节点都没有右子节点的二叉树、所有节点都没有左子节点的二叉树、只有一个节点的二叉树
- 不同位置的节点的下一个节点(?)
因为喜欢的人很优秀,所以自己也要不断努力啊!