题目描述
给定一个二叉树和其中的一个结点,请找出中序遍历顺序的下一个结点并且返回。注意,树中的结点不仅包含左右子结点,同时包含指向父结点的指针。
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 == NULL)
17 return NULL;
18 //如果有右子树,则返回右子树中最左侧的结点
19 if(pNode->right != NULL){
20 pNode = pNode->right;
21 while(pNode->left != NULL){
22 pNode = pNode->left;
23 }
24 return pNode;
25 }
26 //如果没有右子树,则找到第一个当前结点是父结点左子树的结点,返回其父结点
27 while(pNode->next != NULL){
28 if(pNode->next->left == pNode)
29 return pNode->next;
30 pNode = pNode->next;
31 }
32 //推到根仍未找到,则说明当前结点为遍历后的尾结点,返回空
33 return NULL;
34 }
35 };