資料結構——二叉樹交換左右
阿新 • • 發佈:2018-11-22
二叉樹交換左右子樹
#include<stdio.h> #include<stdlib.h> #include<string.h> typedef struct Node{ //二叉樹的鏈式儲存結點 char data; struct Node *Lchild; struct Node *Rchild; }BiTNode,*BiTree; void CreateBiTree(BiTree *root){ //形參採用二級指標,實參為結點孩子域地址 char ch; ch=getchar(); if(ch=='#') *root=NULL; else{ *root=(BiTree)malloc(sizeof(BiTree)); (*root)->data=ch; CreateBiTree(&((*root)->Lchild)); CreateBiTree(&((*root)->Rchild)); } } void Visit(char data){ printf("%c",data); } void PreOrder(BiTree T,char a){ //先序遞迴遍歷 if(T){ if(a=='x') Visit(T->data); if(a=='y'){ BiTree T2=T->Lchild; T->Lchild=T->Rchild; T->Rchild=T2; } PreOrder(T->Lchild,a); PreOrder(T->Rchild,a); } } void InOrder(BiTree T){ //中序遞迴遍歷 if(T){ InOrder(T->Lchild); Visit(T->data); InOrder(T->Rchild); } } void PostOrder(BiTree T){ //後序遞迴遍歷 if(T){ PostOrder(T->Lchild); PostOrder(T->Rchild); Visit(T->data); } } int main(){ BiTree T; CreateBiTree(&T); PreOrder(T,'y'); PreOrder(T,'x'); printf("\n"); InOrder(T); printf("\n"); PostOrder(T); return 0; }