求二叉树的镜像(非递归&递归)

本文介绍了二叉树镜像的概念及其两种实现方法:递归方法与非递归方法。递归方法通过分治思想将问题分解,而非递归方法则基于层序遍历进行左右子树交换。

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

前言

什么是二叉树镜像
其实就是左右子树对调一下就是二叉树的镜像了

比如下面两图就是互为镜像的二叉树

这里写图片描述

这里写图片描述

递归方法

方法分析

采用分置的思想,大事化小事,把交换左右子树地址的事交给每一个栈帧完成。

完整代码

//二叉树的镜像 递归方法
void BTreeMirrorR(BTNode* root)
{
    BTNode* tmp;
    if (root == NULL)
        return;
    BTreeMirrorR(root->_left);
    BTreeMirrorR(root->_right);
    tmp = root->_left;
    root->_left = root->_right;
    root->_right = tmp;
}

非递归方法

方法分析

可以在层序遍历的基础上对每一层的结点的左右子树进行交换

//二叉树的镜像 非递归方法
void BTreeMirror(BTNode* root)
{
    BTNode* top;
    BTNode* tmp;
    Queue Q;
    if (root == NULL)
        return;
    QueueInit(&Q);
    QueuePush(&Q, root);
    while (!QueueEmpty(&Q))
    {
        top = QueueFront(&Q);
        if (top->_left != NULL)
            QueuePush(&Q,top->_left);
        if (top->_right != NULL)
            QueuePush(&Q, top->_right);

        //交换左右子树的地址
        tmp = top->_left;
        top->_left = top->_right;
        top->_right = tmp;

        QueuePop(&Q);
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值