www.pudn.com > ParseXML.rar > Tree.cpp


#include "StdAfx.h" 
#include "tree.h" 
 
#include       
///////////////////////////////////////////////////////////////////// 
// class CNode 
 
CNode::CNode(void) 
{ 
	m_pLeftNode = NULL;		//孩子节点 
	m_pRightNode = NULL;	//兄弟节点 
	m_pParentNode = NULL;	//双亲节点 
} 
 
CNode::~CNode(void) 
{ 
} 
 
 
///////////////////////////////////////////////////////////////////// 
// class CTree 
 
CTree::CTree(void) 
{ 
	m_RootNode.m_pLeftNode = NULL; 
	m_RootNode.m_pParentNode = NULL; 
	m_RootNode.m_pRightNode = NULL; 
} 
 
CTree::~CTree(void) 
{ 
} 
 
void CTree::FreeNode(CNode* pNode) 
{ 
	if(pNode != NULL) 
	{ 
		FreeNode(pNode->m_pLeftNode); 
		FreeNode(pNode->m_pRightNode); 
		delete pNode; 
	} 
} 
 
void CTree::FreeTree() 
{ 
	FreeNode(m_RootNode.m_pLeftNode); 
} 
 
CNode* CTree::GetRootNode() 
{ 
	return &m_RootNode; 
} 
 
void CTree::InsertChildNode(CNode* pNode, CNode* pParent) 
{ 
	if(pNode != NULL && pParent != NULL) 
	{ 
		if(pParent->m_pLeftNode != NULL) 
		{ 
			CNode* p = pParent->m_pLeftNode; 
			while(p->m_pRightNode != NULL) p = p->m_pRightNode; 
			p->m_pRightNode = pNode; 
			pNode->m_pParentNode = pParent; 
		} 
		else 
		{ 
			pParent->m_pLeftNode = pNode; 
			pNode->m_pParentNode = pParent; 
		} 
	} 
}