给定一个二叉树,创建一颗新的二叉树,使得新树和原树具有轴对称关系。比如把下面左图中的树经过轴对称变化改为下面右图中的树。
从树的结构看,适合仿照递归遍历的思路,完成新树的创建,这里和递归遍历不同的是,每次需要记录一下当前节点的父节点的信息,要不然没法链成一颗树。
copy_t为原树中待拷贝的节点,parent_t为新树中的拷贝副本节点的父节点。is_left判断当前进行拷贝的节点为parent_t的左孩子还是右孩子。
参考如下:
link mirror_tree(link parent_t,link copy_t, int is_left)
{
if(!copy_t)
return NULL;
link new_root=make_node(copy_t->item);
if(parent_t!=NULL&&is_left==1)//当前节点不是根节点,且是parent的左孩子
parent_t->l=new_root;
if(parent_t!=NULL&&is_left==0)//当前节点不是根节点,且是parent的右孩子
parent_t->r=new_root;
mirror_tree(new_root, copy_t->r, 1);
mirror_tree(new_root, copy_t->l, 0);
return new_root;
}
然后在这里