leetcode 226 翻转二叉树

简介: leetcode 226 翻转二叉树

翻转二叉树


89a2fc1cf9284fd5b8b9d9562c3a176c.png

广度搜索法

/**
 * 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;
        queue<TreeNode*> my_que;
        my_que.push(root);
        while(my_que.empty() != 1)
        {
            int size = my_que.size();
            for(int i=0 ; i <size ;i++)
            {
                TreeNode* cur = my_que.front();
                my_que.pop();
                if(cur->left!= nullptr) my_que.push(cur->left);
                if(cur->right!= nullptr) my_que.push(cur->right);
        //交换左右子树
                if(cur->left!= nullptr || cur->right != nullptr)
                {
                    TreeNode* tem = cur->left;
                    cur->left = cur->right;
                    cur->right = tem;
                }
            }
        }
        return root;
    }
};

递归法

递归法前序和后续可以正常使用,但是中序会被反转两次,所以中序是左中左(右已经被翻成左了)

/**
 * 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:
    void swap_tree_front(TreeNode* cur)
    {
        if(cur == nullptr) return;
        swap(cur->left , cur->right);
        swap_tree(cur->left);
        swap_tree(cur->right);
    }
   void swap_tree_middle(TreeNode* cur)
    {
        if(cur == nullptr) return;
        //这里中序是左中左,因为右被翻成左了
        swap_tree(cur->left);
        swap(cur->left , cur->right);
        swap_tree(cur->left);
    }
    void swap_tree_back(TreeNode* cur)
    {
        if(cur == nullptr) return;
        swap_tree(cur->left);
        swap_tree(cur->right);
        swap(cur->left , cur->right);
    }
    TreeNode* invertTree(TreeNode* root) {
        swap_tree_front(root);
        //swap_tree_middle(root);
        //swap_tree_back(root)
        return root;
    }
};

二刷

/**
 * 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:
    void revers_tree(TreeNode* cur)
    {
        if(cur == nullptr) return;
        swap(cur->left , cur->right);
        revers_tree(cur->left);
        revers_tree(cur->right);
        return;
    }
    TreeNode* invertTree(TreeNode* root) {
        revers_tree(root);
        return root;
    }
};
相关文章
|
6天前
|
存储 SQL 算法
LeetCode力扣第114题:多种算法实现 将二叉树展开为链表
LeetCode力扣第114题:多种算法实现 将二叉树展开为链表
|
1天前
|
算法
二刷力扣--二叉树(3)
二刷力扣--二叉树(3)
|
1天前
二刷力扣--二叉树(2)
二刷力扣--二叉树(2)
|
1天前
二刷力扣--二叉树(1)基础、遍历
二刷力扣--二叉树(1)基础、遍历
|
3天前
|
算法
【经典LeetCode算法题目专栏分类】【第10期】排序问题、股票问题与TOP K问题:翻转对、买卖股票最佳时机、数组中第K个最大/最小元素
【经典LeetCode算法题目专栏分类】【第10期】排序问题、股票问题与TOP K问题:翻转对、买卖股票最佳时机、数组中第K个最大/最小元素
|
6天前
|
存储 算法 数据可视化
力扣156题最全解法:如何上下翻转二叉树(递归与迭代方法详解,附图解)
力扣156题最全解法:如何上下翻转二叉树(递归与迭代方法详解,附图解)
|
6天前
|
算法 数据可视化 数据挖掘
LeetCode题目104: 二叉树的最大深度(递归\迭代\层序遍历\尾递归优化\分治法实现 )
LeetCode题目104: 二叉树的最大深度(递归\迭代\层序遍历\尾递归优化\分治法实现 )
LeetCode题目104: 二叉树的最大深度(递归\迭代\层序遍历\尾递归优化\分治法实现 )
|
6天前
|
存储 缓存 算法
LeetCode力扣题目111:多种算法对比实现二叉树的最小深度
LeetCode力扣题目111:多种算法对比实现二叉树的最小深度
|
6天前
|
存储 机器学习/深度学习 算法
LeetCode 题目 102:二叉树的层序遍历
LeetCode 题目 102:二叉树的层序遍历
|
6天前
|
存储 数据采集 算法
力扣题目101:对称二叉树
力扣题目101:对称二叉树