劍指——58.二叉樹的下一個結點

58.二叉樹的下一個結點

題目描述

給定一個二叉樹和其中的一個結點,請找出中序遍歷順序的下一個結點並且返回。注意,樹中的結點不僅包含左右子結點,同時包含指向父結點的指針。

struct TreeLinkNode {
     int val;
     struct TreeLinkNode *left;
     struct TreeLinkNode *right;
     struct TreeLinkNode *next;
     TreeLinkNode(int x)
          : val(x)
          , left(NULL)
          , right(NULL)
          , next(NULL)
     {}
};

class Solution {
public:
     TreeLinkNode* GetNext(TreeLinkNode* pNode)
     {
          if (pNode == NULL)
              return NULL;
          //如果有右子樹,則找右子樹的最左結點
          if (pNode->right != NULL)
          {
              pNode = pNode->right;
              while (pNode->left != NULL)
                   pNode = pNode->left;
              return pNode;
          }
          //沒右子樹,則找第一個當前結點的父結點的左孩子
          while (pNode->next != NULL)
          {
              if (pNode->next->left == pNode)
                   return pNode->next;
              pNode = pNode->next;
          }
          return NULL;
     }
};
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章