题目描述:
- 给定一棵二叉树和其中的一个节点,如何找出中序遍历序列的下一个节点?树中的节点除了有两个分别指向左、右子节点的指针,还有一个指向父节点的指针。
解题思路:
根据中序遍历的特点:
- 若该节点有右子树,则下一个节点为右子树最左边的节点
- 若该节点无右子树:
- 若该节点是父节点的左节点,则下一个节点为父节点
- 若该节点是父节点的右节点,则下一个节点为遍历父节点找到一个节点是其父节点左孩子的节点
class BinaryTreeNode: def __init__(self, val): self.val = val self.LeftNode = None self.RightNode = None self.ParentNode = None class Solution: def __init__(self, BinaryTree, Node): self.BinaryTree = BinaryTree self.Node = Node def findNext(self): if self.BinaryTree is None: return None # 存在右子树 if self.Node.RightNode is not None: nextNode = self.Node.RightNode while nextNode.LeftNode != None: nextNode = nextNode.LeftNode return nextNode else: # 如果是父节点的左节点 if self.Node.ParentNode.LeftNode == self.Node: return self.Node.ParentNode # 如果是父节点的右节点 else: nextNode = self.Node.ParentNode while nextNode != None: if nextNode.ParentNode.LeftNode == nextNode: return nextNode.ParentNode nextNode = nextNode.ParentNode return None