交换左右子树
来源:互联网 发布:采购办公软件 编辑:程序博客网 时间:2024/05/23 11:50
#include <stdio.h>#include <stdlib.h>#define MAXSIZE 20typedef struct node{ char data; node * lchild; node * rchild;}BTree;typedef struct{ BTree * data[MAXSIZE]; int rear; int front;}SeqQueue;SeqQueue * init(){ SeqQueue * p; p = (SeqQueue *)malloc(sizeof(SeqQueue)); p->rear = p->front = 0; return p;}void inQueue(SeqQueue * p,BTree * x){ if((p->rear + 1) % MAXSIZE == p->front){ printf("队列已满!\n"); }else{ p->rear = (p->rear + 1) % MAXSIZE; p->data[p->rear] = x; }}BTree * outQueue(SeqQueue * p){ BTree * temp; if(p->front == p->rear){ printf("队列已空!\n"); temp = NULL; }else{ p->front = (p->front + 1) % MAXSIZE; temp = p->data[p->front]; } return temp;}BTree * create(BTree * p){ char ch; scanf("%c",&ch); if(ch != ' '){ p = (BTree *)malloc(sizeof(BTree)); p->data = ch; p->lchild = create(p->lchild); p->rchild = create(p->rchild); return p; }else{ return NULL; }}void change(BTree * p){ //递归的交换左右子树 BTree * q; if(p != NULL){ q = p->lchild; p->lchild = p->rchild; p->rchild = q; change(p->lchild); change(p->rchild); } }BTree * change2(SeqQueue * q,BTree * p){ //非递归的交换左右子树 BTree * temp,* k; if(p != NULL){ inQueue(q,p); }else{ return NULL; } while(q->rear != q->front){ k = outQueue(q); temp = k->lchild; k->lchild = k->rchild; k->rchild = temp; if(k->lchild != NULL){ inQueue(q,k->lchild); } if(k->rchild != NULL){ inQueue(q,k->rchild); } } return p;}void preorder(BTree * p){ if(p != NULL){ printf("%4c",p->data); preorder(p->lchild); preorder(p->rchild); } }int main(){ BTree * p , * k; SeqQueue * q; p = create(p); q = init(); printf("先序遍历:\n"); preorder(p); printf("\n"); change(p); printf("递归交换左右子树(先序遍历):\n"); preorder(p); printf("\n"); k = change2(q,p); if(k != NULL){ printf("非递归交换左右子树(先序遍历):\n"); preorder(k); printf("\n"); }else{ printf("错误!\n"); } return 0;}
0 0
- 左右子树交换
- 交换左右子树
- 二叉树交换左右子树
- 数据结构复习(交换左右子树)
- 二叉树左右子树交换的算法
- 交换左右子树(二叉树)
- 二叉树左右子树的交换
- 二叉树镜像(交换左右子树)
- 实验四、1二叉树左右子树交换
- 二叉树回顾(1):建立、交换左右子树
- 1021_二叉树的复制和左右子树交换
- 226. Invert Binary Tree (交换二叉树左右子树)
- 二叉树的操作(建树,先序遍历,交换左右子树,销毁
- 二叉树中所有节点的左右子树相互交换 递归与非递归程序
- 二叉链表存储结构,交换分支点左右子树算法(C)
- 获取二叉树的叶子数、高度以及左右子树的交换的C语言实现
- 交换二叉树的左右子树——非递归方式
- 将一棵二叉树的全部节点的左右子树交换顺序
- 集结乐电脑管家 v6.5.0.0官方版
- spring 8 bean配置--IOC容器中bean的生命周期
- C++ 字符串转换为浮点数时的精度问题
- iOS App开发:最好的设计和开发工具
- Android学习笔记十六之FrameLayout框架布局
- 交换左右子树
- db2 远程客户机(client)连接
- NGUI 背包系统的拖拽
- 命令功能纪要
- Ubuntu 16.04安装 PeaZip 6.0.3档案管理器
- HikariCP
- js判断手机浏览器版本和是否是ios9版本
- Registry Functions
- 异步本身不会超时 报错