二叉树镜像 -- 递归法

本文介绍了一种通过递归实现二叉树镜像的方法。首先定义了二叉树节点结构体,然后通过递归调用函数交换每个节点的左右子树指针,最终实现了整棵二叉树的镜像翻转。

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

#include <cstdio>  
#include <iostream> 
#include <vector>  
#include <set>
#include <algorithm>
#include <stack>
#include <string>
#include <queue>
#include <unordered_map>
#include <iterator>
using namespace std;

#define N 100
int n , m;

typedef struct node{
    int data;
    struct node* left;
    struct node* right;
    node(int _data = -1)
    {
        data = _data;
        left = NULL;
        right = NULL;
    }
}Bnode;

//递归镜像 
void bmirror(Bnode* root)
{
    if(root == NULL)
        return ;
    Bnode* left = root->left ;
    Bnode* right = root->right;
    bmirror(left);
    bmirror(right);
    root->left = right; // 左右子树交换
    root->right = left;
}

int main()  
{  
    Bnode* b1 = new node(1);
    Bnode* b2 = new node(2);
    Bnode* b3 = new node(3);
    Bnode* b4 = new node(4);
    Bnode* b5 = new node(5);
    Bnode* b6 = new node(6);
    b1->left = b2;
    b1->right = b3;
    b2->left = b4;
    b2->right = b5;
    b3->left = b6;
    /*
              1                        1
            /  \                     /   \
          2     3                   3     2 
         / \    /       镜像         \    / \
        4   5  6                      6  5   4

    */
    bmirror(b1);

    return 0;  
} 
### 对称二叉树概念 对称二叉树是指一棵二叉树与其自身的镜像完全相同。具体来说,对于任意节点而言,该节点的左子树应与右子树互为镜像。这意味着不仅根节点两侧的分支要相等,而且这些分支内部也要保持这种对称关系。 ### 判定方概述 为了验证某棵二叉树是否是对称的,可以采用多种策略: - **递归**:通过对比当前节点及其对应的兄弟节点下的左右孩子来进行逐层匹配。 - **迭代(队列/栈辅助)**:利用额外的数据结构存储待比较的一组节点,在每次循环中取出一对进行检验并加入新的待处理对象直到遍历结束。 ### 实现代码示例 以下是Python版本基于递归方式实现的解决方案: ```python class TreeNode: def __init__(self, val=0, left=None, right=None): self.val = val self.left = left self.right = right def isSymmetric(root: TreeNode) -> bool: def check(p, q): if not p and not q: return True if not p or not q: return False return (p.val == q.val and check(p.left, q.right) and check(p.right, q.left)) return check(root, root) # 测试用例构建 root = TreeNode(1) root.left = TreeNode(2) root.right = TreeNode(2) root.left.left = TreeNode(3) root.left.right = TreeNode(4) root.right.left = TreeNode(4) root.right.right = TreeNode(3) print(isSymmetric(root)) # 输出True表示这是一个对称二叉树 ``` 上述程序定义了一个`TreeNode`类用于创建二叉树节点,并实现了`isSymmetric()`函数来检测输入的二叉树实例是否满足对称条件[^1]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值