剑指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  # 到了根节点仍没找到,则返回空

 

posted @ 2019-11-19 21:24  ayew  阅读(246)  评论(0编辑  收藏  举报