二叉树的下一个节点
题目描述
给定一个二叉树和其中的一个结点,请找出中序遍历顺序的下一个结点并且返回。注意,树中的结点不仅包含左右子结点,同时包含指向父结点的指针。
思路
首先知道中序遍历的规则是:左根右,然后作图
1.若当前节点有右子树,下一节点为右子树的最左节点
2.若无右节点,则下一节点为第一个为其父节点左孩子的父节点。
代码(参考:
# -*- 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 pNode == None: return #若当前节点有右子树,下一节点为右子树的最左节点 if pNode.right: pNode = pNode.right while(pNode.left!=None): pNode = pNode.left return pNode #若无右节点,则下一节点为第一个为其父节点左孩子的父节点。 while(pNode.next!=None): if pNode.next.left == pNode: return pNode.next pNode = pNode.next return None