剑指offer-二叉树的下一结点-树-python
题目描述
给定一个二叉树和其中的一个结点,请找出中序遍历顺序的下一个结点并且返回。注意,树中的结点不仅包含左右子结点,同时包含指向父结点的指针。
思路:中序遍历,pNode节点的下一个节点根据中序遍历法则寻找
# -*- 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.right: # 该节点有右子树 p = pNode.right #将右子树第一个节点作为P while p.left: p = p.left #然后找其左子树最左边 return p while pNode.next: # 无右子树,则找第一个当前节点是父节点左孩子的节点 if (pNode.next.left == pNode): #如果pNode节点的父节点的左节点是pNode return pNode.next #则该节点的父节点为中序遍历下一个节点 pNode = pNode.next # 沿着父节点向上遍历 return # 到了根节点仍没找到,则返回空