翻转二叉树问题的具体思路 递归法 迭代法 (附完整代码)


前言

翻转二叉树,这是一道经典的二叉树问题,是对二叉树进行基本操作的一个典型例子,掌握这个问题的解决方法可以为解决更复杂的二叉树相关问题打下基础。

本文将分别以两种方法【递归】【迭代】来解决这一问题(文章末尾附完整代码)


一、如何理解翻转二叉树

顾名思义,翻转二叉树是以轴对称的方式,将二叉树的左右子树完全翻转,这里引用Leetcode的解释和例题说明

题目链接: [点击跳转] Leetcode 226. 翻转二叉树

请添加图片描述

二、方法一(递归法)

对于这道题来说,使用常规的递归算法可以很轻松的完成要求。

如下,只需要定义一个递归函数invertTree,传入初始的根节点,输出翻转后的跟节点。

TreeNode* invertTree(TreeNode* root) {
   
   
    return root;
}

如下,如果传入的是nullptr,说明要么这是一个空树,要么是传入一个二叉树的叶节点的下一节点(叶节点为树的末端,因此叶节点的下一节点为空),所以我们直接返回nullptr即可,均满足上述两种情况的翻转。

TreeNode* invertTree(TreeNode* root) {
   
   
    if(root==nullptr){
   
   
        return nullptr;
    }
    return root;
}

那么,如果传入的是一个非空节点呢?

如果传入非空节点,我们可以定义一个节点rot,rot用来储存翻转后的左子树根节点。

(不用考虑翻转后的左子树根节点是怎么样的,因为我们运用的是递归法,只需要明确:返回值,以及递归函数的逻辑是否符合要求即可)

交换左右子树根节点。

TreeNode* invertTree(TreeNode* root) {
   
   
    if(root==nullptr){
   
   
        return nullptr;
    }
    TreeNode* rot=invertTree(root->left)<
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值