题目描述
请设计一个算法,寻找二叉树中指定结点的下一个结点(即中序遍历的后继)。
给定树的根结点指针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:
bool isFind = false;
bool isP = false;
TreeNode* ans;
int findSucc(TreeNode* root, int p) {
// write code here
if(root == NULL)
return -1;
fun(root, p);
return isFind? ans ->val : -1;
}
void fun(TreeNode* root, int p)
{
if(root == NULL)
return;
fun(root ->left, p);
if(isFind)
return;
if(isP)
{
ans = root;
isFind = true;
return;
}
if(root ->val == p)
{
isP = true;
}
if(isFind)
return;
fun(root ->right, p);
}
};