交换二叉树的每个节点的左右子树
题目:试编写一个算法将一颗二叉树的所有节点的左右子树进行交换。 分析: 我们仍然可以采用递归的方式进行交换。
代码如下:
struct biTree { char data; struct biTree *lchild; struct biTree *rchild; }; #include <stdio.h> #include <stdlib.h> void swapTree(biTree *T) {//其本质就是从叶子节点开始进行交换,一路推进到根节点 struct biTree *p = T,*t; if (!p) return; if (!p->lchild&&!p->rchild) {//如果没有左右孩子,就不需要交换了,直接返回 return; } else { swapTree(p->lchild);//交换左子树 swapTree(p->rchild);//交换右子树 t = p->lchild; p->lchild = p->rchild; p->rchild = t; } } int main() { int num; struct biTree *T = (struct biTree*)malloc(sizeof(struct biTree)); biTree *create(biTree *); void inOrder(biTree *); T = create(T);//创建一颗二叉树 inOrder(T); printf(" "); swapTree(T); inOrder(T); return 0; }
舞台再大,你不上台,永远是个观众。平台再好,你不参与,永远是局外人。能力再大,你不行动,只能看别人成功!没有人会关心你付出过多少努力,撑得累不累,摔得痛不痛,他们只会看你最后站在什么位置,然后羡慕或鄙夷。