두 갈래 나무의 순서가 두루 흐르는 귀속과 비귀속

1825 단어
// 
template<class NodeType>
class Stack
{
public:
	Stack(){nIndex = 0;}
	~Stack(){}

	// 
	void Push(NodeType *p)
	{
		arr[nIndex] = p;
		++nIndex;
	}

	// 
	NodeType *Top()
	{
		--nIndex;
		if (nIndex<0)
		{
			nIndex = 0;
			return NULL;
		}
		return arr[nIndex];
	}

	bool IsEmpty()
	{
		return nIndex == 0;
	}

private:
	NodeType *arr[100];
	int nIndex;// 
};

struct Node 
{
	int nData;
	struct Node *pLchild;
	struct Node *pRchild;
};

// 
void DG_BianLi(Node *pTree)
{
	if (!pTree)
	{
		return;
	}
	printf("%d ",pTree->nData);
	DG_BianLi(pTree->pLchild);
	DG_BianLi(pTree->pRchild);
}

// 
void FDG_BianLi(Node *pTree)
{
	Node *pNode = pTree;
	Stack<Node> stack;
	while(pNode || !stack.IsEmpty())
	{
		if (pNode)
		{
			printf("%d ",pNode->nData);
			stack.Push(pNode);
			pNode = pNode->pLchild;
		}
		else
		{
			pNode = stack.Top();
			pNode = pNode->pRchild;
		}	
	}
}


int _tmain(int argc, _TCHAR* argv[])
{
	// 
	Node node[5] = 
	{
		{1,NULL,NULL},
		{2,NULL,NULL},
		{3,NULL,NULL},
		{4,NULL,NULL},
		{5,NULL,NULL}
	};

	node[0].pLchild = &node[1];
	node[0].pRchild = &node[4];

	node[1].pLchild = &node[2];
	node[2].pRchild = &node[3];
	
	//DG_BianLi(node);
	FDG_BianLi(node);

	getchar();
	return 0;
}


좋은 웹페이지 즐겨찾기