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. 不同位置的节点的下一个节点(?)

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

  • 相关阅读:
    jmeter 参数化测试
    jmeter属性与变量
    jmeter作用域规则
    jmeter执行顺序
    jmeter元素
    Array Transformer UVA
    A Simple Problem with Integers POJ
    分块 && 例题 I Hate It HDU
    c文件二进制读取写入文件、c语言实现二进制(01)转化成txt格式文本、c读取文件名可变
    sort排序使用以及lower_bound( )和upper_bound( )
  • 原文地址:https://www.cnblogs.com/RebeccaG/p/11973481.html
Copyright © 2011-2022 走看看