二叉树系列(4)趣图_二叉树的轴对称树

本文介绍如何根据给定的二叉树,创建一棵与其轴对称的新二叉树。通过递归方法,记录节点的父节点信息,来构造新树的结构。此外,还提及了一个将原树轴对称变换的简洁实现。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

给定一个二叉树,创建一颗新的二叉树,使得新树和原树具有轴对称关系。比如把下面左图中的树经过轴对称变化改为下面右图中的树。

从树的结构看,适合仿照递归遍历的思路,完成新树的创建,这里和递归遍历不同的是,每次需要记录一下当前节点的父节点的信息,要不然没法链成一颗树。

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;
	
}

然后在这里http://cslibrary.stanford.edu/110/BinaryTrees.html看到了更简洁的实现,不过这里是把原树进行了轴对称变换,而不是创建了新树进行轴对称变化。

void mirror(struct node* node) { 
  if (node==NULL) { 
    return; 
  } 
  else { 
    struct node* temp;

    // do the subtrees 
    mirror(node->left); 
    mirror(node->right);

    // swap the pointers in this node 
    temp = node->left; 
    node->left = node->right; 
    node->right = temp; 
  } 
} 

完整的cpp程序可以参考上一篇文章, 二叉树系列(3)层序遍历的非递归实现


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值