代码随想录day 15

翻转二叉树

// 确认返回值和参数
    TreeNode* invertTree(TreeNode* root) {
    // 确认终止条件
    if(root == NULL) return root;
    swap(root->left,root->right);
    invertTree(root->left);
    invertTree(root->right);
    return root;
    }

总的来通过二叉树循环三步骤就可以完成基于遍历二叉树之上的多个操作 

对称二叉树

// 递归法
    // 二叉树遍历三部曲
    // 1. 明确返回值类型即参数
    bool Compare(TreeNode* left,TreeNode*right){
        // 2. 明确终止条件
        if(left != NULL && right == NULL) return false;
        if(left == NULL && right != NULL) return false;
        if(left == NULL && right == NULL) return true;
        if(left->val != right->val) return false;
        bool outside = Compare(left->left,right->right);
        bool insiede = Compare(left->right,right->left);
        bool isSame = outside && insiede;
        return isSame;
    }
    bool isSymmetric(TreeNode* root) {
        if(root == NULL) return true;
        else return Compare(root->left,root->right);
    }
// 迭代法
    bool isSymmetric(TreeNode* root) {
        if (root == NULL) return true;
        queue<TreeNode*> que;
        que.push(root->left);   // 将左子树头结点加入队列
        que.push(root->right);  // 将右子树头结点加入队列
        while(!que.empty()){
            TreeNode* leftNode = que.front(); que.pop();
            TreeNode* rightNode = que.front(); que.pop();
            if (!leftNode && !rightNode) {  // 左节点为空、右节点为空,此时说明是对称的
                continue;
            }
            // 左右有一个不为空或左右值不相等
            if(!leftNode || !rightNode || leftNode->val != rightNode->val) retrun false;
            // 剩下的可能是左右两值相同
            que.push(leftNode->left);
            que.push(leftNode->right);
            que.push(rightNode->left);
            que.push(rightNode->right);
        }
    }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值