文章目录
前言
翻转二叉树,这是一道经典的二叉树问题,是对二叉树进行基本操作的一个典型例子,掌握这个问题的解决方法可以为解决更复杂的二叉树相关问题打下基础。
本文将分别以两种方法【递归】【迭代】来解决这一问题(文章末尾附完整代码)
一、如何理解翻转二叉树
顾名思义,翻转二叉树是以轴对称的方式,将二叉树的左右子树完全翻转,这里引用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)<

最低0.47元/天 解锁文章
1379

被折叠的 条评论
为什么被折叠?



