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++翻转二叉树的主要内容,如果未能解决你的问题,请参考以下文章

数据结构——二叉树的基础练习题(单值二叉树,翻转二叉树,相同的树,对称二叉树,另一颗子树,二叉树的前序遍历)

树的遍历 | 翻转二叉树

LeetCode951-翻转等价二叉树

难倒Homebrew发明人的翻转二叉树到底有多简单?

翻转一棵二叉树

951. 翻转等价二叉树