1. 程式人生 > >【劍指offer】8、二叉樹中序遍歷的下一個節點

【劍指offer】8、二叉樹中序遍歷的下一個節點

pan color col amp nullptr nbsp 父節點 public turn

題目

給定一個二叉樹和其中一個節點,找出中序遍歷的下一個節點。註意:樹的節點中除了有指向左右節點的指針,還有指向父節點的指針。

思路

(1)若該節點Node有右子樹,則下一個節點就是右子樹中的最左節點,就是在右節點中一直往左子樹找。

(2)若Node沒有右子樹

  (i)Node是左子節點,則下一個節點就是node的父節點。

  (ii)Node是右子節點,則下一個節點就要一直向上找,找到第一個左子節點,也就是第一種情況。

/*
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 == nullptr) return nullptr; TreeLinkNode* res; if (pNode->right){ TreeLinkNode* right = pNode->right; while (right->left) right
= right->left; res = right; } else if (pNode->next != nullptr ){ TreeLinkNode* parent = pNode->next; TreeLinkNode* cur = pNode; while (parent != nullptr && parent->right == cur){ cur = parent; parent
= parent->next; } res = parent; } return res; } };

【劍指offer】8、二叉樹中序遍歷的下一個節點