使用基于数组的二叉树删除和旋转

时间:2015-04-15 14:09:45

标签: c++ algorithm tree

class AST
{
private:
    TreeNode **a;       
    int capacity;        
public:                       
void deletenode(const int &i);        

这是我的AST树类(TreeNode是一个抽象类)。

让我们假装一个[t]是[i]的左孩子,在调用deletenode(i)之后,a [t]及其左边的孩子应该被删除而一个[t]的右边孩子应该成为一个[i]的新左孩子。

我真的很无能,我应该说“这就是我试过的”,但我会说这就是我的想法:

1 - 从[t]的右边孩子(和它的孩子)建立一个新树,然后在[i]的左边插入新树,我有一个功能,可以将树插入树中但是这个是一个非常差,慢的算法。

2 - 考虑一些关系应用于每个节点,以便a [i] = a [f(i)],然后删除[f(i)],但我没有找到任何f(i)和有一些节点不受删除的影响。

我需要的是算法,没有别的,这就像它的名字暗示的是编译器项目,删除对于优化很重要,我需要它基于数组,因为广度优先传递算法更简单它。

类似于我的问题

Delete operation in Array Binary Tree。但是,它没有回答我的问题,也没有说任何关于轮换的事情。

关于基于数组的二进制树有很多问题,但关于删除和旋转没有。

那么有一个快速的算法吗?谢谢你的帮助。

PS

根是[0]而不是[1]。所以a [i]的左子是[2 * i + 1],右边是[2 * i + 2]。

0 个答案:

没有答案