【算法】输入一颗二元查找树,将该树转换为它的镜像
来源:互联网 发布:淘宝网睡衣家居服 编辑:程序博客网 时间:2024/05/17 23:02
题目:输入一棵二元查找树,将该树转换为它的镜像,即在转换后的二元查找树中,左子树的结点都大于右子树的结点。
要求:用递归和循环两种方法完成树的镜像转换。
举例:
8 8 / \ 转换 / \ 6 10 --> 10 6 / \ / \ / \ / \ 5 7 9 11 11 9 7 5
#include <iostream>#include <cstdio>#include <cstdlib>#include <queue>#include <stack>using namespace std;typedef struct node{int key;struct node *pleft;struct node *pright; }Node;int CreateTreeByInsertData(Node **p,int k)//理解为什么用二级指针{if(*p==NULL) {*p=(Node *)malloc(sizeof(Node));(*p)->key=k; (*p)->pleft=(*p)->pright=NULL; return 1;}else if(k == (*p)->key) return 0;else if(k < (*p)->key) return CreateTreeByInsertData(&(*p)->pleft,k); elsereturn CreateTreeByInsertData(&(*p)->pright,k); }void swap(Node **l, Node **r){Node *p = *l;*l = *r;*r = p;}void mirror(Node *root)//递归来使得镜像对称{if(root == NULL)return;swap( &(root->pleft), &(root->pright));mirror(root->pleft);mirror(root->pright);}void mirrorByStack(Node *root)//用栈来做得镜像对称{stack<Node *>myStack;if(root == NULL)return;myStack.push(root);while(!myStack.empty()){Node *p = myStack.top();//取得栈顶元素myStack.pop();//只是弹出,删除,并不能取到栈顶元素swap( &(p->pleft), &(p->pright));if(p->pleft!=NULL)myStack.push(p->pleft);if(p->pright!=NULL)myStack.push(p->pright);}}void visitByLevel(Node *p)//层次遍历,上到下,左到右{queue<Node*> myQueue;if(p == NULL)return;myQueue.push(p);while(!myQueue.empty()){Node *now = myQueue.front();myQueue.pop();printf("%d ",now->key);if(now->pleft) myQueue.push(now->pleft);if(now->pright) myQueue.push(now->pright);}printf("\n");}void ClearTree(Node** tree)//删除树的操作,在本题中不一定用的到{if(*tree==NULL)return;ClearTree(&(*tree)->pleft);ClearTree(&(*tree)->pright);free(*tree);*tree=NULL;}int main(){int i;Node *proot = NULL;int data[] = {8,6,10,5,7,9,11};//依次插入一些数据,创建一个二叉排序树for(i=0; i<sizeof(data)/sizeof(int); i++)CreateTreeByInsertData(&proot, data[i]);visitByLevel(proot);//8 6 10 5 7 9 11mirror(proot);visitByLevel(proot);//8 10 6 11 9 7 5mirrorByStack(proot);visitByLevel(proot);//8 6 10 5 7 9 11ClearTree(&proot);return 0; }
- 【算法】输入一颗二元查找树,将该树转换为它的镜像
- 输入一颗二元查找树,将该树转换为它的镜像
- 15、输入一颗二元查找树,将该树转换为它的镜像
- 输入一颗二元查找树,将该树转换为它的镜像
- 输入一颗二元查找树,将该树转换为它的镜像,
- 输入一颗二元查找树,将该树转换为它的镜像
- 15.输入一颗二元查找树,将该树转换为它的镜像
- 15.输入一颗二元查找树,将该树转换为它的镜像
- No15、输入一颗二元查找树,将该树转换为它的镜像
- 输入一颗二元查找树,将该树转换为它的镜像
- 输入一颗二元查找树,将该树转换为它的镜像
- No15_输入一颗二元查找树,将该树转换为它的镜像,
- 输入一颗二元查找树,将该树转换为它的镜像
- 15 输入一颗二元查找树,将该树转换为它的镜像
- 13.输入一颗二元查找树,将该树转换为它的镜像
- 输入一颗二元查找树,将该树转换为它的镜像
- 输入一颗二元查找树,将该树转换为它的镜像
- 输入一棵二元查找树, 将该树转换为它的镜像
- arm7 力天电子 lpc2148 GPIO之花样流水灯
- heru 5081 Turn the corner(三分)
- C# 多线程同步
- XML语法—XML中5个预定义的实体引用及对应的英语解释
- 关于2812的bootloader与中断向量表之间的关系——DSP2812启动过程
- 【算法】输入一颗二元查找树,将该树转换为它的镜像
- datastage调度之java调度 欢迎加QQ群:106389516讨论
- javaSE学习笔记7 组合、初始化块
- 循环队列
- socket简单编程
- Java多线程发展简史
- 误格式化后数据恢复
- Oracle与SQL Server对比(思维导图)
- SSH框架双向多对多关系中如何向中间表插入数据