点击(此处)折叠或打开
- 二叉树操作
- 遍历
-
- 先序遍历【先访问根节点】
- 先访问根节点
- 再先序访问左子树
- 再先序访问右子树
-
- 中序遍历【中间访问根节点】
- 中序遍历左子树
- 再访问根节点
- 再中序遍历右子树
-
- 后序遍历【最后访问根节点】
- 先后序遍历左子树
- 再后序遍历右子树
- 再访问根节点
点击(此处)折叠或打开
- 链式二叉树.cpp
- --------------------------------------
- #include <stdio.h>
- #include <malloc.h>
- typedef struct BTNode
- {
- char data;
- struct BTNode * pLchild;
- struct BTNode * pRchild;
- }BTNode;
- BTNode * CreateBTree(void);
- void PreTraverseBTree(BTNode *);
- void InTraverseBTree(BTNode *);
- void PostTraverseBTree(BTNode *);
- int main()
- {
- BTNode * pT = CreateBTree();
- //PreTraverseBTree(pT);
- //InTraverseBTree(pT);
- PostTraverseBTree(pT);
- return 0;
- }
- BTNode * CreateBTree(void)
- {
- BTNode * pA = (BTNode *)malloc(sizeof(BTNode));
- BTNode * pB = (BTNode *)malloc(sizeof(BTNode));
- BTNode * pC = (BTNode *)malloc(sizeof(BTNode));
- BTNode * pD = (BTNode *)malloc(sizeof(BTNode));
- BTNode * pE = (BTNode *)malloc(sizeof(BTNode));
-
- pA->data = 'A';
- pB->data = 'B';
- pC->data = 'C';
- pD->data = 'D';
- pE->data = 'E';
-
- pA->pLchild = pB;
- pA->pRchild = pC;
- pB->pLchild = pB->pRchild = NULL;
- pC->pLchild = pD;
- pC->pRchild =NULL;
- pD->pLchild =NULL;
- pD->pRchild =pE;
- pE->pLchild = pE->pRchild = NULL;
- return pA;
- }
- void PreTraverseBTree(BTNode * pT)
- {
- if (NULL!=pT)
- {
- printf("%c\n",pT->data);
-
- if (NULL!=pT->pLchild)
- {
- PreTraverseBTree(pT->pLchild); //pLchild代表整个左子树
- }
- if (NULL!=pT->pRchild)
- {
- PreTraverseBTree(pT->pRchild);
- }
- }
- }
- void InTraverseBTree(BTNode * pT)
- {
- if (NULL!=pT)
- {
- if (NULL!=pT->pLchild)
- {
- InTraverseBTree(pT->pLchild); //pLchild代表整个左子树
- }
-
- printf("%c\n",pT->data);
- if (NULL!=pT->pRchild)
- {
- InTraverseBTree(pT->pRchild);
- }
- }
- }
- void PostTraverseBTree(BTNode * pT)
- {
- if (NULL!=pT)
- {
- if (NULL!=pT->pLchild)
- {
- PostTraverseBTree(pT->pLchild); //pLchild代表整个左子树
- }
- if (NULL!=pT->pRchild)
- {
- PostTraverseBTree(pT->pRchild);
- }
- printf("%c\n",pT->data);
- }
- }