劍指offer_編程題_二叉樹的下一個節點

  • 題目
    給定一個二叉樹和其中的一個結點,請找出中序遍歷順序的下一個結點並且返回。
    注意,樹中的結點不僅包含左右子結點,同時包含指向父結點的指針。
    
  1. 中序遍歷的下一個節點
    如果該節點有右子樹,則右子樹的最左節點爲所求
    如果沒有右孩子節點,檢查父節點
    如果父節點的左孩子是自身,則父節點爲所求
    如果父節點的右孩子是自身,則檢查父節點的父節點直到某個節點爲其父節點的左孩子,其父節點爲所求
    /*
    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)
            {
         	   TreeLinkNode* temp = pNode->right;
         	   while(temp->left!=NULL)
         		   temp = temp->left;
         	   return temp;
            }
            if (pNode->next!=NULL)
            {
         	   if (pNode->next->left == pNode)
         		   return pNode->next;
         	   if (pNode->next->right == pNode)
         	   {
         		   TreeLinkNode* temp = pNode->next;
         		   while(temp->next!=NULL)
         		   {
         			   if(temp == temp->next->left)
         				   return temp->next;
         			   temp = temp->next;
         		   }
         		   return NULL;
         	   }
            }
            return NULL;
        }
    };
    
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章