zoukankan      html  css  js  c++  java
  • Go语言实现:【剑指offer】二叉树的下一个结点

    该题目来源于牛客网《剑指offer》专题。

    给定一个二叉树和其中的一个结点,请找出中序遍历顺序的下一个结点并且返回。

    注意,树中的结点不仅包含左右子结点,同时包含指向父结点的指针。

    Go语言实现:

    type TreeNode struct {
       Val    int
       Left   *TreeNode
       Right  *TreeNode
       Parent *TreeNode
    }func getNext(node *TreeNode) *TreeNode {
       if node == nil {
          return nil
       }//node有右子树,则取右子树的最左结点
       if node.Right != nil {
          next := node.Right
          for next.Left != nil {
             next = next.Left
          }
          return next
       } else {
          //node没有右子树且存在父节点
          for node.Parent != nil {
             //node为父结点的左孩子,则取node的父结点
             if node.Parent.Left == node {
                return node.Parent
             } else {
                //node为父结点的右孩子,则取node.P遍历,直到node.P是node.P.P的左孩子为止
                node = node.Parent
             }
          }
       }
       return nil
    }
    
  • 相关阅读:
    java中的设计模式
    stack
    最大堆排序
    Starship Troopers
    Tick and Tick
    Last non-zero Digit in N!
    G
    C
    B
    A
  • 原文地址:https://www.cnblogs.com/dubinyang/p/12099389.html
Copyright © 2011-2022 走看看