当前位置: 首页 > 工具软件 > 101 > 使用案例 >

101. 对称二叉树

龚振
2023-12-01

这题让我做麻烦了,不过我思路也很对。两颗二叉树如果序列化结果事一样的,那么两个完全一样。如果镜像对称,序列化的时候一个先插入左子节点,一个先插入右子节点。有个代码有点傻,我为了能用要一个函数就解决,用了个傻了吧唧的bool变量。

/**
 * 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:
    vector<string>serial( TreeNode* node,bool isleft)
    {
        queue<TreeNode*>bfs;
        vector<string>ret;
        if(node==nullptr)
            return ret;
        bfs.push(node);
        while(!bfs.empty())
        {
            queue<TreeNode*>bfs_tmp;
            bfs_tmp.swap(bfs);
            while(!bfs_tmp.empty())
            {
                auto top = bfs_tmp.front();
                bfs_tmp.pop();
                if(nullptr==top)
                    ret.push_back("nullptr");
                else
                {
                    ret.push_back(to_string(top->val));
                    if(isleft)
                    {
                        bfs.push(top->left);
                        bfs.push(top->right);
                    }
                    else
                    {
                        bfs.push(top->right);
                        bfs.push(top->left);
                    }
                }
            }
        }
        return ret;
    }
    bool isSymmetric(TreeNode* root) {
        return root==nullptr||serial(root->left,true)==serial(root->right,false);
    }
};
 类似资料: