C++翻转二叉树

Posted 久病成良医

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C++翻转二叉树相关的知识,希望对你有一定的参考价值。

翻转一棵二叉树。

示例:
输入:

输出:

递归思路

只要把每一个节点的左右孩子翻转一下,就可以达到整体翻转的效果

1.确定递归函数的参数和返回值
参数就是要传入节点的指针,不需要其他参数了,通常此时定下来主要参数,如果在写递归的逻辑中发现还需要其他参数的时候,随时补充。
返回值的话其实也不需要,但是题目中给出的要返回root节点的指针,可以直接使用题目定义好的函数,所以就函数的返回类型为TreeNode*。
TreeNode* invertTree(TreeNode* root)

2.确定终止条件
当前节点为空的时候,就返回
if (root == NULL) return root;

3.确定单层递归的逻辑
因为是先前序遍历,所以先进行交换左右孩子节点,然后反转左子树,反转右子树。
swap(root->left, root->right);
invertTree(root->left);
invertTree(root->right);

/**
 * Definition for a binary tree node.
 * struct TreeNode {
 *     int val;
 *     TreeNode *left;
 *     TreeNode *right;
 *     TreeNode() : val(0), left(nullptr), right(nullptr) {}
 *     TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}
 *     TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {}
 * };
 */
class Solution {
public:
    TreeNode* invertTree(TreeNode* root) {
        if(root==nullptr)  //递归的终止条件 
            return root;
        swap(root->left,root->right); //交换左右两个子节点 
        invertTree(root->left);   
        invertTree(root->right);
        return root;
    }
};

以上是关于C++翻转二叉树的主要内容,如果未能解决你的问题,请参考以下文章

leetcode 226 Invert Binary Tree 翻转二叉树

「经典题目回顾」翻转二叉树!

二叉树:你真的会翻转二叉树么?

剑指offer-二叉树的镜像

代码随想录算法训练营第15天 | ● 层序遍历 10 ● 226.翻转二叉树 ● 101.对称二叉树 2

算法 翻转二叉树 dfs