从堆中分配内存并初始化每个数据为0可以这样:m_pTree = new int[size](); 这是C++11的新特性!~
2016-11-07
如果删除根节点要把后面的子节点也删掉吧,使用递归:int leftPos = nodeIndex*2 + 1;
int rightPos = nodeIndex*2 + 2;
int temp = 0;
if(leftPos <= m_iSize && m_pTree[leftPos] != 0){
DeleteNode(leftPos,&temp);
}
if(rightPos <= m_iSize && m_pTree[rightPos] != 0){
DeleteNode(rightPos,&temp);
}
int rightPos = nodeIndex*2 + 2;
int temp = 0;
if(leftPos <= m_iSize && m_pTree[leftPos] != 0){
DeleteNode(leftPos,&temp);
}
if(rightPos <= m_iSize && m_pTree[rightPos] != 0){
DeleteNode(rightPos,&temp);
}
2016-10-15
做了人生中第一次有意义的debug,有问题,耐心一点,一层层剥开,终会找到bug!
把void Node::DeleteNode()中的代码:this->pParent->pRChild = NULL;写成了this->pParent->pParent=NULL,因此删除结点6时,采用后序遍历,第五次当要访问结点6的双亲结点2时就出现了问题,发生访问冲突!(我排查到了DeleteNode有问题,但编译通过,逻辑有问题,怪不得一直没有查出来!)
把void Node::DeleteNode()中的代码:this->pParent->pRChild = NULL;写成了this->pParent->pParent=NULL,因此删除结点6时,采用后序遍历,第五次当要访问结点6的双亲结点2时就出现了问题,发生访问冲突!(我排查到了DeleteNode有问题,但编译通过,逻辑有问题,怪不得一直没有查出来!)
2016-10-10