题目描述

给定一个二叉树和其中的一个结点,请找出中序遍历顺序的下一个结点并且返回。注意,树中的结点不仅包含左右子结点,同时包含指向父结点的指针。

​https://www.nowcoder.com/practice/9023a0c988684a53960365b889ceaf5e?tpId=13&tqId=11210&rp=3&ru=/ta/coding-interviews&qru=/ta/coding-interviews/question-ranking​

题解:

说实话第一时间没想到下面解法,想到的是中序遍历然后找。

分析中序遍历情况即可。

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;
}
};