/*
题目:输入一颗二元查找树,将该树转换为它的镜像,
即在转换后的二元查找树中,左子树的结点都大于右子树的结点。
用递归和非递归两种方法完成树的镜像转换。
*/
//感觉随便一种遍历方式都可以做到
#include<stack>
#include<queue>
typedef struct node {
int value;
struct node * lchild , *rchild;
} BT_node , *BT_pointer;
void conv_recursive( BT_pointer T ){
if( T ) {
BT_pointer p;
conv_recursive( T -> lchild );
conv_recursive( T -> rchild );
p = T -> rchild;
T -> rchild = T -> lchild;
T -> lchild = p;
}
}
//按层次遍历
void conv_BFS( BT_pointer T ){
if( T == NULL ) return;
queue<BT_pointer> q;
BT_pointer cur = NULL;
BT_pointer tmp = NULL;
q.push( T );
while( ! q.empty() ) {
cur = q.front();
q.pop();
tmp = cur->lchild;
cur -> lchild = cur -> rchild;
cur -> rchild = tmp;
if( cur -> lchild !== NULL ) {
q.push( cur -> lchild );
q.push( cur -> rchild );
}
}
}
镜像一棵BST
最新推荐文章于 2021-09-22 17:39:20 发布