代码随想录算法训练营第十五天|226.翻转二叉树 101.对称二叉树 2

本文介绍了两个关于二叉树操作的问题:如何使用C++实现翻转二叉树(通过sweep方法),以及判断一个二叉树是否对称(通过递归函数compare)。
摘要由CSDN通过智能技术生成

226.翻转二叉树

class Solution {
public:
    void sweap(TreeNode* a, TreeNode* b) {
        TreeNode* cur = a;
        a = b;
        b = cur;
    }
    TreeNode* invertTree(TreeNode* root) {
        stack<TreeNode*> a;
        vector<int> ret;
        if (root != NULL)
            a.push(root);
        while (!a.empty()) {
            TreeNode* node = a.top();
            if (node != NULL) {
                a.pop();
                if (node->right)
                    a.push(node->right);
                if (node->left)
                    a.push(node->left);
                swap(node->left, node->right);
                a.push(node);
                a.push(NULL);
            } else {
                a.pop();
                TreeNode* k = a.top();
                a.pop();
                ret.push_back(k->val);
            }
        }
        return root;
    }
};

101.对称二叉树 2    

class Solution {
public:
    bool compare(TreeNode* l, TreeNode* r) {
        if (l == NULL && r != NULL)
            return false;
        else if (l != NULL && r == NULL)
            return false;
        else if (l == NULL && r == NULL)
            return true;
        else if(l->val != r->val)
            return false;
        if (compare(l->left, r->right) && compare(l->right, r->left)) {
            return true;
        }
        return false;
    }
    bool isSymmetric(TreeNode* root) {
        if (root == NULL)
            return true;
        return compare(root->left, root->right);
    }
};

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值