Day14|226.翻转二叉树、101. 对称二叉树、104.二叉树的最大深度、111.二叉树的最小深度

今天后3题用层序遍历都很好做,但是递归总是很难想出来,递归是真的想不明白,好挫败啊,还得多看多练。

226.翻转二叉树

用了前序递归法,后面的迭代法没看。中序递归法很绕,但一定要弄懂(可以看视频),看明白之后会对递归有一个更深的理解。

101. 对称二叉树
自己没想出来。看评论区提醒用层序迭代很好写(注意int类型不识别null,使用optional<int>容器,nullopt等价于null,好像是c++17才支持):

class Solution {

public:

    bool isSymmetric(TreeNode* root) {

        queue<TreeNode*> que;

        deque<optional<int>> nums;

        if (root != nullptr) que.push(root);

        else return true;

        while (!que.empty()) {

            int size = que.size();

            for (int i = 0; i < size; i++) {

                if (que.front()->left != nullptr) {

                    que.push(que.front()->left);

                    nums.push_back(que.front()->left->val);

                }

                else

                    nums.push_back(nullopt);

                if (que.front()->right != nullptr) {

                    que.push(que.front()->right);

                    nums.push_back(que.front()->right->val);

                }

                else

                    nums.push_back(nullopt);

                que.pop();

            }

            while (!nums.empty()) {

                if (nums.front() == nums.back()) {

                    nums.pop_back();

                    nums.pop_front();

                }

                else

                    return false;

            }

        }

        return true;

    }

};

104.二叉树的最大深度

自己选择用层序遍历。递归法推荐计算树的高度=树的最大深度。直接用前序递归求深度看不懂啊啊啊。

111.二叉树的最小深度

层序遍历简单。递归难。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值