[剑指offer] 57. 二叉树的下一个结点

题目描述

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

思路:

(1) 若该节点存在右子树:则下一个节点为右子树最左子节点(如图节点 B )

(2) 若该节点不存在右子树:

  2.1 该节点为父节点的左子节点,则下一个节点为其父节点(如图节点 D )

  2.2 该节点为父节点的右子节点,则沿着父节点向上遍历,知道找到一个节点的父节点的左子节点为该节点,则该节点的父节点的父节点。

class Solution
{
  public:
    TreeLinkNode *GetNext(TreeLinkNode *pNode)
    {
        if (pNode->right)
        {
            pNode = pNode->right;
            while (pNode->left)
                pNode = pNode->left;
            return pNode;
        }
        else if (pNode->next != NULL && pNode == pNode->next->left)
            return pNode->next;
        else if (pNode->next != NULL && pNode == pNode->next->right)
        {
            while (pNode->next != NULL && pNode != pNode->next->left)
                pNode = pNode->next;
            return pNode->next;
        }
        return pNode->next;
    }
};
原文地址:https://www.cnblogs.com/ruoh3kou/p/10241630.html