zoukankan      html  css  js  c++  java
  • 【剑指offer】11-二叉树的下一个节点

    题目:

    给定一个二叉树和其中的一个结点,请找出中序遍历顺序的下一个结点并且返回。注意,树中的结点不仅包含左右子结点,同时包含指向父结点的指针。


     思路:

    见书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

     用例:

    1. 完全二叉树、不完全二叉树
    2. 特殊二叉树:所有节点都没有右子节点的二叉树、所有节点都没有左子节点的二叉树、只有一个节点的二叉树
    3. 不同位置的节点的下一个节点(?)

    因为喜欢的人很优秀,所以自己也要不断努力啊!

  • 相关阅读:
    SQL Server 损坏修复
    记录一些数据库函数或全局变量
    查询数据库空间使用情况
    SQL Server 2008文件与文件组的关系
    大型网站--负载均衡架构
    本地事务和分布式事务工作实践
    IIS防止同一IP大量非法访问
    使用EventLog类写Windows事件日志
    1878: [SDOI2009]HH的项链
    模板
  • 原文地址:https://www.cnblogs.com/RebeccaG/p/11973481.html
Copyright © 2011-2022 走看看