创建二叉树,并对其进行 先序、中序、后序遍历
//创建二叉树,并对其进行 先序、中序、后序遍历 #include<stdio.h> // #include<string.h> typedef struct BiTNode { BiTNode(char* name) { strcpy(this->name,name); lchild=NULL; rchild=NULL; } BiTNode* InsertSbOnMyLeft(BiTNode* Sb) { this->lchild=Sb; return Sb; } BiTNode* InsertSbOnMyRight(BiTNode* Sb) { this->rchild=Sb; return Sb; } char name[256]; // 结点的值 BiTNode *lchild,*rchild; // 左右孩子指针 }BiTNode,*PBiTNode; void DestroyBiTree(PBiTNode T) { // 初始条件:二叉树T存在。操作结果:销毁二叉树T if(T) // 非空树 { DestroyBiTree(T->lchild); // 递归销毁左子树,如无左子树,则不执行任何操作 DestroyBiTree(T->rchild); // 递归销毁右子树,如无右子树,则不执行任何操作 delete T; // 释放根结点 } } void PreOrderTraverse(PBiTNode T) { if(T) // T不空 { printf("%s ",T->name); // 先访问根结点 PreOrderTraverse(T->lchild); // 再先序遍历左子树 PreOrderTraverse(T->rchild); // 最后先序遍历右子树 } } void InOrderTraverse(PBiTNode T) { if(T) { InOrderTraverse(T->lchild); // 先中序遍历左子树 printf("%s ",T->name); // 访问根结点 InOrderTraverse(T->rchild); // 最后中序遍历右子树 } } void PostOrderTraverse(PBiTNode T) { if(T) // T不空 { PostOrderTraverse(T->lchild); // 先后序遍历左子树 PostOrderTraverse(T->rchild); // 再后序遍历右子树 printf("%s ",T->name); // 访问根结点 } } void main() { PBiTNode T=NULL,tmpNode=NULL; T=new BiTNode("zhao"); tmpNode=T->InsertSbOnMyLeft(new BiTNode("qian")); PBiTNode l,r; l=tmpNode->InsertSbOnMyLeft(new BiTNode("shun")); r=tmpNode->InsertSbOnMyRight(new BiTNode("Li")); tmpNode=T->InsertSbOnMyRight(new BiTNode("zhou")); l=tmpNode->InsertSbOnMyLeft(new BiTNode("wu")); r=tmpNode->InsertSbOnMyRight(new BiTNode("Zheng")); r->InsertSbOnMyLeft(new BiTNode("Wang")); printf("先序递归遍历二叉树: "); PreOrderTraverse(T); // 先序递归遍历二叉树T printf(" 中序递归遍历二叉树: "); InOrderTraverse(T); // 中序递归遍历二叉树T printf(" 后序递归遍历二叉树: "); PostOrderTraverse(T); // 后序递归遍历二叉树T }
下一篇:
矩阵的广义逆及python实践