Write an algorithm to find the ‘next’ node (e.g., in-order successor) of a given node in a binary search tree where each node has a link to its parent.
比较简单,先把中序结果存到vector中,然后直接找i+1个节点就行。
#include <iostream>
#include <vector>
using namespace std;
struct TreeNode
{
int val;
TreeNode *left;
TreeNode *right;
TreeNode(int x) : val(x), left(NULL), right(NULL) {}
};
void inorder(TreeNode * head, vector<TreeNode *> &inorder_vector)
{
if(head != NULL)
{
inorder(head->left, inorder_vector);
inorder_vector.push_back(head);
inorder(head->right, inorder_vector);
}
}
TreeNode *inorderSuccessor(TreeNode * head, TreeNode * cur)
{
vector<TreeNode *> inorder_vector;
inorder(head, inorder_vector);
for(int i=0;i<inorder_vector.size()-1;i++)
{
if(inorder_vector[i]==cur)
return inorder_vector[i+1];
}
return NULL;
}
int main()
{
TreeNode * a = new TreeNode(1);
TreeNode * b = new TreeNode(2);
TreeNode * c = new TreeNode(3);
TreeNode * d = new TreeNode(4);
TreeNode * e = new TreeNode(5);
TreeNode * f = new TreeNode(6);
a->left=b;
a->right=c;
b->right=d;
c->left=e;
c->right=f;
TreeNode *ans = inorderSuccessor(a, b);
if(ans!=NULL)
cout<<ans->val;
return 0;
}