Traverse(); cout<
index<<" "<
data << endl; if(this->pRChild != NULL) this->pRChild->InorderTraverse(); } void Node::PostorderTraverse() { if(this->pLChild !=NULL) this->pLChild->PostorderTraverse(); if(this->pRChild != NULL) this->pRChild->PostorderTraverse(); cout<
index<<" "<
data << endl; }
tree.cpp文件:
#include"stdlib.h"
Tree::Tree()
{
m_pRoot = new Node(); //申请内存
}
Tree::~Tree()
{
// DeleteNode(0,NULL); //这种方式也能实现销毁树
m_pRoot->DeleteNode();
}
Node *Tree::SearchNode(int nodeIndex)
{
return m_pRoot->SearchNode(nodeIndex); //根节点调用查找
}
bool Tree::AddNode(int nodeIndex,int direction,Node *pNode) // 索引号,左(0)右(1)孩子 ,要插入的节点
{
Node *temp =SearchNode(nodeIndex); //先查找
if(temp==NULL)
return false; //不存在则不能插入
Node *node = new Node(); //申请新节点
if(node==NULL) //申请是否成功
return false;
node->index = pNode->index; //传入索引号
node->data = pNode->data; //传入数据
node->pParent = temp; //这很关键,涉及到删除的成功与否 ,指出插入的节点双亲是谁
if(0==direction)
temp->pLChild = node;
if(1==direction)
temp->pRChild = node;
return true;
}
bool Tree::DeleteNode(int nodeIndex,Node *pNode)
{
Node *temp =SearchNode(nodeIndex); //先找到才能删
if(temp==NULL)
return false;
if(pNode != NULL)
pNode->data=temp->data; //删除数据可以传出
temp->DeleteNode(); //调用Node.cpp中的删除方法
return true;
}
/**以下是三种遍历,实现在Node.cpp里定义**/
void Tree::PreorderTraverse()
{
m_pRoot->PreorderTraverse();
}
void Tree::InorderTraverse()
{
m_pRoot->InorderTraverse() ;
}
void Tree::PostorderTraverse()
{
m_pRoot->PostorderTraverse();
}
domo.cpp文件(用于验证):
#include
#include"Tree.h"
using namespace std;
int main()
{
Node node1;
node1.index=1;
node1.data = 5;
Node node2;
node2.index=2;
node2.data = 8;
Node node3;
node3.index=3;
node3.data = 2;
Node node4;
node4.index=4;
node4.data = 6;
Node node5;
node5.index=5;
node5.data = 9;
Node node6;
node6.index=6;
node6.data = 7;
Tree *pTree = new Tree();
pTree->AddNode(0,0,&node1);
pTree->AddNode(0,1,&node2);
pTree->AddNode(1,0,&node3);
pTree->AddNode(1,1,&node4);
pTree->AddNode(2,0,&node5);
pTree->AddNode(2,1,&node6);
cout<<"PreorderTraverse: " <
PreorderTraverse(); cout<<"InorderTraverse: " <
InorderTraverse(); cout<<"PostorderTraverse: " <
PostorderTraverse(); pTree->DeleteNode(6,NULL); cout<<"PreorderTraverse: " <
PreorderTraverse(); delete pTree; pTree= NULL; return 0; }
运行结果: