递归解决汉诺塔问题和二叉树的先序中序后序遍历问题

来源:互联网 发布:mac上安装mysql 编辑:程序博客网 时间:2024/06/04 06:21
在外的日子都是孤独的,希望每天都能过得充实,每天都会有收获。
ShanSir@Dalian 2012-4-8


贴两段小程序,积累生活的点点滴滴。

汉诺塔问题

#include <stdio.h>void hannuota(int n,char A,char B,char C){//如果是一个盘子//直接将X柱子上的盘子从X移动到Z//否则//先将X柱子上的n-1个盘子借助C移动到B//直接将A柱子上的盘子从A移动到C//最近将B柱子上的n-1个盘子借助A移动到Cif(1 == n){printf("将编号为%d的盘子直接从%c柱子移动到%c柱子\n",n,A,C);}else{hannuota(n-1,A,C,B);printf("将编号为%d的盘子直接从%c柱子移动到%c柱子\n",n,A,C);hannuota(n-1,B,A,C);//printf("将%c柱子上的%d个盘子借助%c移动到%c",A,n-1,C,B);//printf("将%c柱子上的盘子从%c移动到%c",A,A,C);//printf("将%c柱子上的%d个盘子借助%c移动到%c",B,n-1,A,C);}}int main(void){char ch1 = 'A';char ch2 = 'B';char ch3 = 'C';int n;printf("请输入要移动盘子的个数:");scanf("%d",&n);hannuota(n,'A','B','C');return 0;}



#include <stdio.h>#include <malloc.h>struct BTNode{char data;struct BTNode* pLchild;//p是指针 L是左 child是孩子struct BTNode* pRchild;};struct BTNode* CreateBTree(void);void PreTraverseBTree(struct BTNode* pT);void InTraverseBTree(struct BTNode* pT);void PostTraverseBTree(struct BTNode* pT);int main(void){struct BTNode* pT = CreateBTree();printf("先序遍历为:");PreTraverseBTree(pT);printf("\n");printf("中序遍历为:");InTraverseBTree(pT);printf("\n");printf("后序遍历为:");PostTraverseBTree(pT);printf("\n");return 0;}void PreTraverseBTree(struct BTNode* pT){//伪算法//先访问根节点//再先序访问左子树//先序访问右子树if(NULL != pT){printf("%c\t",pT->data);if(NULL != pT ->pLchild){PreTraverseBTree(pT->pLchild);}if(NULL != pT->pRchild){PreTraverseBTree(pT->pRchild);}}}void InTraverseBTree(struct BTNode* pT){//伪算法//先中序访问左子树//访问根节点//再中序访问右子树if(NULL != pT){if(NULL != pT ->pLchild){InTraverseBTree(pT->pLchild);}printf("%c\t",pT->data);if(NULL != pT->pRchild){InTraverseBTree(pT->pRchild);}}}void PostTraverseBTree(struct BTNode* pT){//伪算法//先后序访问左子树//再后序访问右子树//再显示根节点if(NULL != pT){if(NULL != pT ->pLchild){PostTraverseBTree(pT->pLchild);}if(NULL != pT->pRchild){PostTraverseBTree(pT->pRchild);}printf("%c\t",pT->data);}}struct BTNode* CreateBTree(){struct BTNode* pA = (struct BTNode *)malloc(sizeof(struct BTNode));struct BTNode* pB = (struct BTNode *)malloc(sizeof(struct BTNode));struct BTNode* pC = (struct BTNode *)malloc(sizeof(struct BTNode));struct BTNode* pD = (struct BTNode *)malloc(sizeof(struct BTNode));struct BTNode* pE = (struct BTNode *)malloc(sizeof(struct 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;}