翻转二叉树

给你一棵二叉树的根节点 root ,翻转这棵二叉树,并返回其根节点。

 

示例 1:

 

 

 

 

输入:root = [4,2,7,1,3,6,9]
输出:[4,7,2,9,6,3,1]
示例 2:

 

 

输入:root = [2,1,3]
输出:[2,3,1]

想法一:

1.是在前序遍历(递归)中反转二叉树:

class Solution {//实际上是一个前序遍历,只是在中间加上了翻转的过程
public:
    TreeNode* invertTree(TreeNode* root) {
        if (root == nullptr) {
            return root;
        }
        cout << root->val << endl;
        invertTree(root->left);
        invertTree(root->right);
        return root;//题目要求最后返回根节点
    }
};

2.在前序循环遍历中翻转二叉树:

class Solution {
public:
    TreeNode* invertTree(TreeNode* root) {
        stack<TreeNode*>st;
        if (root == NULL) {
            return root;
        }
        st.push(root);
        while (!st.empty()) {
            TreeNode* ft = st.top();
            swap(ft->left,ft->right);
            st.pop();
            if (ft->right)st.push(ft->right);//注意这里的位置和递归的方法是反过来的,是先右节点后左节点
            if (ft->left)st.push(ft->left);
        }
        return root;
    }
};

 想法二、利用后序遍历来实现:(原理类似),但是中序遍历的话可能会更难

 

posted @ 2022-09-10 16:28  铜锣湾陈昊男  阅读(12)  评论(0)    收藏  举报