请设计一个算法,寻找二叉树中指定结点的下一个结点(即中序遍历的后继)。
给定树的根结点指针TreeNode* root和结点的值int p,请返回值为p的结点的后继结点的值。保证结点的值大于等于零小于等于100000且没有重复值,若不存在后继返回-1
题目很简单:直接遍历中序遍历即可。
/*
struct TreeNode {
int val;
struct TreeNode *left;
struct TreeNode *right;
TreeNode(int x) :
val(x), left(NULL), right(NULL) {
}
};*/
class Successor {
public:
void recurlook(TreeNode *node,int p,vector
&vec,int &local)
{
if(!node)
return;
recurlook(node->left,p,vec,local);
vec.push_back(node->val);
if(node->val == p )
{
local = vec.size()-1;
}
recurlook(node->right,p,vec,local);
}
int findSucc(TreeNode* root, int p) {
// write code here
vector
vec;
int local = -1;
recurlook(root,p,vec,local);
if(local == vec.size()-1)
return -1;
return vec[local+1];
}
};