//队列非递归遍历需要 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; }
摘要:
这也不算是一本书,是我为了能够帮助一些入门不深的朋友写的,面向的读者是学习了C语言或者C++,但却并不知道怎么去做出有实际用途的程序来。从去年开始写的,到今年3月底完成。本来自己做了一个论坛,原文发布在自己的论坛上,可自己的毕竟是小的,看得人也不多,现在空间也到期了,别人看不到了,想了想,应该给自己的汗水找个稳定的家吧,同时希望能够帮助更多的朋友,发现博客园,聚集着这么多的技术狂热者或好心的朋友,... 阅读全文