题目:
二叉树的下一个结点
链接:
https://www.nowcoder.com/practice/9023a0c988684a53960365b889ceaf5e?tpId=13&tqId=11210&tPage=3&rp=3&ru=%2Fta%2Fcoding-interviews&qru=%2Fta%2Fcoding-interviews%2Fquestion-ranking
题目描述:
给定一个二叉树和其中的一个结点,请找出中序遍历顺序的下一个结点并且返回。注意,树中的结点不仅包含左右子结点,同时包含指向父结点的指针。
思路:
在当前结点下:
如果有右节点,则下一个结点一定在当前结点的右子树中,且下一个结点的左子树为空;
如果没有右节点,则下一个结点一定在当前结点的父辈之中,且下一个节点的左子树一定是该节点的父辈;
代码:
1 /* 2 struct TreeLinkNode { 3 int val; 4 struct TreeLinkNode *left; 5 struct TreeLinkNode *right; 6 struct TreeLinkNode *next; 7 TreeLinkNode(int x) :val(x), left(NULL), right(NULL), next(NULL) { 8 9 }10 };11 */12 class Solution {13 public:14 TreeLinkNode* GetNext(TreeLinkNode* pNode)15 { 16 if(pNode == nullptr)17 return nullptr;18 if(pNode ->right != nullptr){19 pNode = pNode->right;20 while(pNode->left != nullptr){21 pNode = pNode->left;22 }23 return pNode;24 }25 while (pNode->next != nullptr){26 if(pNode->next->left == pNode){27 return pNode->next;28 }29 pNode = pNode->next;30 }31 return nullptr;32 } 33 };