c++ - AVL 二叉搜索树旋转 C++

标签 c++ nodes

我正在研究一棵 avl 树,我认为我做对了一切,但我不确定这是我的右旋转函数,我做的是否正确?

Node* BinaryTree::rotateRight(Node *N)
{
    Node *newNode = new Node();
    newNode = N->getLeft();
    N->setLeft(newNode->getRight());
    newNode->setRight(N);
    root = newNode;
    return newNode;
}

最佳答案

rotateRight 不需要分配新节点。它仅通过操纵指向现有节点的指针来工作。像这样

Node* BinaryTree::rotateRight(Node *N)
{
    Node *pivot = N->getLeft();
    N->setLeft(pivot->getRight());
    pivot->setRight(N);
    return pivot;
}

因此,除了不必要地分配新节点并出于某种原因分配给根节点之外,您几乎是正确的。

顺便说一句,rotateRight 通常可以成为静态方法。

关于c++ - AVL 二叉搜索树旋转 C++,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15780014/

相关文章:

c - 如何使用 void 修改链表节点?

c - 树递归编译,但在执行时崩溃

c++ - 如何在编译时标记默认参数的所有使用

c++ - Qt 中的子目录模板

c++ - std::function 可以是类数据成员吗?

c++ - 分配对指针数组的引用

java - 对 Java 的垃圾收集器如何工作的困惑(节点 + 队列)

c++ - 遍历链表和修改或插入节点C++

c - C中链表删除节点

c++ - 链接器想要我已经链接的库