数据结构之打印二叉树所有(根结点起)路径—整理严蔚敏数据结构

来源:互联网 发布:淘宝ipod classic 编辑:程序博客网 时间:2024/05/24 01:34
#include<iostream>#include<malloc.h>using namespace std;#define STACKSIZE 20#define SIZEADD 10typedef char ElemType;typedef struct BTNode{ElemType data;struct BTNode *pLchild;struct BTNode *pRchild;}BTNode,*pBTNode;typedef struct Stack{pBTNode *pBottom;pBTNode *pTop;int Stacksize;}Stack;void InitStack(Stack &S){S.pBottom = new pBTNode[STACKSIZE];S.pTop = S.pBottom;S.Stacksize = STACKSIZE;}void CreateBT(pBTNode &pT){ElemType c;cin >> c;if (c == '#')pT = NULL;else{pT = new BTNode;pT->data = c;CreateBT(pT->pLchild);CreateBT(pT->pRchild);}}bool StackEmpty(Stack S){if (S.pBottom == S.pTop)return true;elsereturn false;}void Push(Stack &S, pBTNode pT){if (S.pTop - S.pBottom >= S.Stacksize){S.pBottom = (pBTNode *)realloc(S.pBottom, (STACKSIZE + SIZEADD)*sizeof(pBTNode));S.pTop = S.pBottom + SIZEADD;S.Stacksize += SIZEADD;}*S.pTop++ = pT;}void Pop(Stack &S){if (StackEmpty(S))return;--S.pTop;}void Visit(pBTNode pT){cout << pT->data << " ";}void PreOrder(pBTNode pT){if (pT){Visit(pT);PreOrder(pT->pLchild);PreOrder(pT->pRchild);}}void StackPrintAs(Stack S){pBTNode *ppT = S.pBottom;if (StackEmpty(S)){cout << "The Stack is empty!" << endl;return;}while (ppT < S.pTop)Visit(*ppT++);cout << endl;}void PrintAllPath(pBTNode pT, Stack &S){if (pT){Push(S, pT);if (!(pT->pLchild) && !(pT->pRchild))StackPrintAs(S);else{PrintAllPath(pT->pLchild, S);PrintAllPath(pT->pRchild, S);}Pop(S);}}int main(void){pBTNode pT; Stack S;CreateBT(pT);//"ABC##D##EF##G##"InitStack(S);PreOrder(pT);cout << endl;PrintAllPath(pT, S);return 0;}

0 0