一共有一下情况:
1、只要有右子树,就找右子树中最左的节点;
2、没有右子树,就像上遍历,找第一个当前节点是父节点的左孩子的节点
3、退到了根节点,还没找到,就返回NULL
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) return pNode; 17 if(pNode->right){ 18 pNode = pNode->right; 19 while(pNode->left){ 20 pNode = pNode->left; 21 } 22 return pNode; 23 } 24 while(pNode->next){ 25 if(pNode->next->left == pNode) return pNode->next; 26 pNode = pNode->next; 27 } 28 return NULL; 29 } 30 };