#include <iostream>
#include <vector>
using namespace std;
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 *> ve;
void in_order(TreeLinkNode* t)
{
if(t)
{
in_order(t->left);
ve.push_back(t);
in_order(t->right);
}
}
TreeLinkNode* GetNext(TreeLinkNode* pNode)
{
TreeLinkNode *header,*p;
p = pNode;
if(p!=NULL)
{
header = p;
p = p->next;
}
in_order(header);
int i,len;
len = ve.size();
for(i=0;i<len;i++)
{
if(ve[i]== pNode)
{
if(i == len-1) return NULL;
else return ve[i+1];
}
}
}
};
中序遍历树,然后把结点存在向量之后再去比对,为啥没通过所有测试用例
解决方案:28分
33…37 行,不是 if ,而是 while。你需要找到根。
解决方案:2分
是得到后继, 不需要中序遍历的
TreeLinkNode *tree_min(TreeLinkNode *p) { while(p->left) p =p->left; return p }
TreeLinkNode *tree_next(TreeLinkNode *p) {
if(p->right) return tree_min(p->right);
auto res =x->parent;
while(res && p ==res->right) p =res, res=p->parent;
return res;
}