4.5-求BST的中序后继节点

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;
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值