为了账号安全,请及时绑定邮箱和手机立即绑定

关于数据结构中的树,james老师的授课内容

我打印出来的是 3 5 8 2 6 9 0 0 0 0 120,后面有个120是怎么回事啊

#include<iostream>
#include<stdlib.h> 
using namespace std;

class Tree
{
  public:
  	Tree(int size,int *pRoot);//创建树 
	~Tree();//销毁树 
	int *SearchNode(int nodeIndex); //根据索引寻找结点 
	bool AddNode(int nodeIndex,int direction,int *pNode);//添加结点
	bool DeleteNode(int nodeIndex,int *pNode);//删除结点
	void TreeTraverse();//遍历
  
  private:
  	int *m_pTree;
  	int m_iSize;//记录数组的大小 
};

Tree::Tree(int size,int *pRoot)
{
	m_iSize=size; 
	m_pTree = new int[size];//申请内存 
	for(int i;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)
{
	if(nodeIndex<0||nodeIndex>=m_iSize)
	{
		return false;
	}
	if(m_pTree[nodeIndex]==0)
	{
		return false;
	}
	if(direction==0)
	{
		if(nodeIndex*2+1>=m_iSize)
	    {
		    return false;
	    }
	    if(m_pTree[nodeIndex*2+1]!=0)
	    {
		    return false;
	    }
		m_pTree[nodeIndex*2+1]=*pNode;
	}
	if(direction==1)
	{
		if(nodeIndex*2+2>=m_iSize)
	    {
		    return false;
	    }
	    if(m_pTree[nodeIndex*2+2]!=0)
	    {
		    return false;
	    }
		m_pTree[nodeIndex*2+2]=*pNode;
	}
	return true;
}

bool Tree::DeleteNode(int nodeIndex,int *pNode)
{
	if(nodeIndex<0||nodeIndex>=m_iSize)
	{
		return false;
	}
	if(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(void)
{
	int root=3; 
	Tree *pTree = new Tree(10,&root);
	
	int node1=5;
	int node2=8;
	pTree->AddNode(0,0,&node1);
	pTree->AddNode(0,1,&node2);
	
	int node3=2;
	int node4=6;
	pTree->AddNode(1,0,&node3);
	pTree->AddNode(1,1,&node4);
	
    int node5=9;
	int node6=7;
	pTree->AddNode(2,0,&node5);
	pTree->AddNode(2,1,&node6);
	
	int node=0;
	pTree->DeleteNode(6,&node);
    cout<<" node ="<<node<<endl;
	pTree->TreeTraverse();
	
	int *p=pTree->SearchNode(2);
	cout<<endl;
	cout<<" node ="<<*p<<endl;
	
	delete pTree;
	
	
	system("pause");
	return 0;
}


正在回答

1 回答

你的代码在遍历那里有错啊,for(int i=0;i<=m_iSize;i++)这里去掉等于号for(int i=0;i<m_iSize;i++),还有构造函数那里for(int i;i<size;i++)的i要初始化for(int i=0;i<size;i++)。这样就好了

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

举报

0/150
提交
取消

关于数据结构中的树,james老师的授课内容

我要回答 关注问题
意见反馈 帮助中心 APP下载
官方微信