在BST中,如何使左指针指向父指针和右指向正确的兄弟指针

时间:2013-08-13 15:55:47

标签: algorithm data-structures binary-tree

通过执行级别顺序遍历并相应地更改,可以使右指针指向右边的兄弟。但是,我不知道同时执行此操作的过程。有什么建议吗?

2 个答案:

答案 0 :(得分:0)

在锦标赛问题中,您可以使用灰色代码来确定其左侧或右侧节点的时间。另一种方法是,如果值小于或等于父值,则其为右节点。

答案 1 :(得分:0)

只需做一个BFS并记住关卡和父级。以下是

的c ++代码
void BSTRightSibling(BSTNode *root)
{
    queue<BSTNode*> q;
    map<BSTNode*, BSTNode*> m;
    BSTNode* levelNode = root;

    q.push(root);
    while(! q.empty()) {
        BSTNode* n = q.front();
        if (n->left) {
            q.push(n->left);
            m[n->left] = n;
            if (n == levelNode) {
                levelNode = n->left;
            }
        }
        if (n->right) {
            q.push(n.right);
            m[n->right] = n;
            if (n == levelNode) {
                levelNode = n->right;
            }
        }
        q.pop();
        if ((!q.empty()) && (n != levelNode)) {
            n->right = q.front();
        } else {
            n->right = NULL;
        }
        n->left = m[n];
    }
}