【劍指offer】8、二叉樹中序遍歷的下一個節點
阿新 • • 發佈:2018-07-09
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、二叉樹中序遍歷的下一個節點