Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/149.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 基于数组的二叉树删除和旋转_C++_Algorithm_Tree - Fatal编程技术网

C++ 基于数组的二叉树删除和旋转

C++ 基于数组的二叉树删除和旋转,c++,algorithm,tree,C++,Algorithm,Tree,这是我的AST树类TreeNode是一个抽象类 让我们假设a[t]是[i]的左子代,在调用deletenodei之后,a[t]及其左子代应该被删除,而[t]的右子代应该成为[i]的新左子代 我真的不知道,我应该说这是我试过的,但我要说的是我的想法: 1-从[t]的右子代及其子代构建一棵新树,然后在[i]的左侧插入新树,我有一个函数可以将树插入树中,但这是一个非常糟糕、缓慢的算法 2-考虑在每个节点上应用某种关系,使a[i]=a[fi],然后删除a[fi],但我没有找到任何fi,并且有些节点不受删

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

让我们假设a[t]是[i]的左子代,在调用deletenodei之后,a[t]及其左子代应该被删除,而[t]的右子代应该成为[i]的新左子代

我真的不知道,我应该说这是我试过的,但我要说的是我的想法:

1-从[t]的右子代及其子代构建一棵新树,然后在[i]的左侧插入新树,我有一个函数可以将树插入树中,但这是一个非常糟糕、缓慢的算法

2-考虑在每个节点上应用某种关系,使a[i]=a[fi],然后删除a[fi],但我没有找到任何fi,并且有些节点不受删除的影响

我需要的是算法,没有别的,顾名思义,这是一个编译器项目,删除对于优化很重要,我需要它基于数组,因为宽度优先通过算法简单得多

一个与我类似的问题 。然而,它没有回答我的问题,也没有说任何关于旋转的事情

还有很多关于基于数组的二叉树的问题,而不是关于删除和旋转的问题

那么有没有一种快速算法可以做到这一点呢?谢谢你的帮助

附言 根目录是[0]而不是[1]。所以a[i]的左子代是a[2*i+1],右子代是a[2*i+2]

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