题目描述

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

思路:先从当前节点一直往上找,找到ROOT,然后进行中序遍历,依次加入节点到vector里面,然后在vector里面找当前节点的下一个节点。

/*
struct TreeLinkNode {
int val;
struct TreeLinkNode *left;
struct TreeLinkNode *right;
struct TreeLinkNode *next;
TreeLinkNode(int x) :val(x), left(NULL), right(NULL), next(NULL) {

}
};
*/
class Solution {
public:
vector<TreeLinkNode*> v;
void inOrder(TreeLinkNode* node)
{
if(node)
{
inOrder(node->left);
v.push_back(node);
inOrder(node->right);
}
}
TreeLinkNode* GetNext(TreeLinkNode* pNode)
{
TreeLinkNode* c = pNode;
if(!c) return NULL;
while(c->next)
{
c = c->next;
}
inOrder(c);
for(int i=0;i<v.size()-1;i++)
{
if(v[i]==pNode)
return v[i+1];
}
return NULL;
}
};