给定一个二叉树和其中的一个结点,请找出中序遍历顺序的下一个结点并且返回。注意,树中的结点不仅包含左右子结点,同时包含指向父结点的指针。
左中右,有右则右,没有则上。右上后左上,无左上则空。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41
|
class Solution { public: TreeLinkNode* GetNext(TreeLinkNode* pNode) { if (pNode->right == nullptr) { while (pNode->next && pNode->next->right == pNode) { pNode = pNode->next; } if (pNode->next == nullptr) { return nullptr; } else { return pNode->next; } } else { pNode = pNode->right; while (pNode->left) { pNode = pNode->left; } return pNode; } } };
|