亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定

析構函數內存釋放問題

程序如下,望大佬指點

// data_structure_explore_tree.cpp : 定義控制臺應用程序的入口點。
//數組實現二叉樹的儲存,利用父親結點下標*2+1是左孩子結點 父親結點*2+2是右孩子結點
//任務:樹的創建和銷毀
//樹中結點的搜索
//樹中結點的添加與刪除
//樹中結點的遍歷
#include "stdafx.h"
#include <iostream>
using namespace std;

class Tree {
public:
?Tree(int size,int *pRoot);
?~Tree();
?bool AddNode(int nodeIndex, int direction, int *pNode);
?int *SearchNode(int nodeIndex);//nodeIndex是結點的標識,記錄結點位置
?bool DeleteNode(int nodeIndex, int *pNode);
?void TreeTraverse();
?int *m_pTree;//記錄結點的一個數組
?int m_iSize;
};
Tree::Tree(int size,int *pRoot) {//pRoot表示根結點的值
?m_iSize = size;
?m_pTree = new int[size];
?for (int i = 0;i < size;i++) {
??m_pTree[i] = 0;
?}
?m_pTree[0] = *pRoot;
}
Tree::~Tree(){
?delete m_pTree;
?m_pTree = NULL;
}
int *Tree::SearchNode(int nodeIndex) {
?if (nodeIndex < 0 || nodeIndex >= m_iSize) {
??return NULL;
?}
?if (m_pTree[nodeIndex] == 0) {
??return NULL;
?}
?return &m_pTree[nodeIndex];
}
bool Tree::AddNode(int nodeIndex, int direction,int *pNode) {
?//direction標識插入的結點是左還是右孩子,0表示左,1表示右
?//NodeIndex表示要插入的根節點位置
?if (nodeIndex < 0 || nodeIndex >= m_iSize||m_pTree[nodeIndex]==0) {
??return false;
?}
?if (direction == 0) {
??if (nodeIndex * 2 + 1 >= m_iSize||m_pTree[nodeIndex*2+1]!=0) {
???return false;
??}
??m_pTree[nodeIndex*2+1] = *pNode;
?}
?if (direction == 1) {
??if (nodeIndex * 2 + 2 >= m_iSize || m_pTree[nodeIndex * 2 + 2] != 0) {
???return false;
??}
??m_pTree[nodeIndex * 2 + 2] = *pNode;
?}
?return true;
}
bool Tree::DeleteNode(int nodeIndex, int *pNode) {//question:刪掉這個結點要不要把孩子節點刪掉啊
?if (nodeIndex<0 || nodeIndex>m_iSize || m_pTree[nodeIndex]==0) {
??return false;
?}
?*pNode = m_pTree[nodeIndex];
?m_pTree[nodeIndex] = 0;
?return true;
}
void Tree::TreeTraverse() {
?for (int i = 0;i < m_iSize;i++) {
??cout << m_pTree[i] << " ";
?}
}
int main()
{
?int root = 3;
?int node1 = 5, node2 = 8;
?Tree *pTree = new Tree(10,&root);
?pTree->AddNode(0, 0,&node1);
?pTree->AddNode(0, 1, &node2);

?int node3 = 2, node4 = 6;
?pTree->AddNode(1, 0, &node3);
?pTree->AddNode(1, 1, &node4);

?int node5 = 9, node6 = 7;
?pTree->AddNode(2, 0, &node5);
?pTree->AddNode(2, 1, &node6);

?pTree->TreeTraverse();
?delete[]pTree;
??? return 0;
}


正在回答

1 回答

最后的delete []pTree,改成delete pTree.../(ㄒoㄒ)/~~

0 回復 有任何疑惑可以回復我~

舉報

0/150
提交
取消

析構函數內存釋放問題

我要回答 關注問題
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號