Leetcode调试常用函数C++实现

393 阅读1分钟

打印

打印vector或bool

template<class T>
void print(vector<T>& vec)
{
    for (auto v : vec)
    {
        cout << v << ", ";
    }
    cout << endl;
}

void print(bool flag)
{
    if (flag)cout << "true\n";
    else cout << "false\n";
}

链表

把vector转化为leetcode链表。

struct ListNode {
    int val;
    ListNode* next;
    ListNode(int x) : val(x), next(NULL) {}

};

template<class T>
ListNode* buildListLC(vector<T> vals)
{
    if (vals.size() < 1)return NULL;
    ListNode* head = new ListNode(vals[0]), * pre = head;
    for (int i = 1; i < vals.size(); i++)
    {
        struct ListNode* current = new ListNode(vals[i]);
        pre->next = current;
        pre = current;
    }
    return head;
}

根据leetcode序列化显示的vector建立二叉树,打印二叉树。

struct TreeNode {
    int val;
    TreeNode* left;
    TreeNode* right;
    TreeNode(int x) : val(x), left(NULL), right(NULL) {}

};

void print(TreeNode* ptr)
{
    // bfs
    if (!ptr)cout << "[]\n";
    queue< TreeNode*> que;
    que.push(ptr);
    printf("[%d", ptr->val);
    string tail = "";
    while (!que.empty())
    {
        TreeNode* current = que.front();
        que.pop();
        if (current->left)
        {
            que.push(current->left);
            if (tail.size() > 0)
            {
                cout << tail;
                tail = "";
            }
            printf(", %d", current->left->val);
        }
        else
        {
            tail += ", null";
        }
        if (current->right)
        {
            que.push(current->right);
            if (tail.size() > 0)
            {
                cout << tail;
                tail = "";
            }
            printf(", %d", current->right->val);
        }
        else
        {
            tail += ", null";
        }
    }
    printf("]\n");
}


// 本函数不适用于vals元素为0的情况(NULL默认为0)
TreeNode* buildTreeLC(vector<int> vals)
{
    if (vals.size() < 1)return NULL;
    // bfs
    int idx = 0;
    TreeNode* root = new TreeNode(vals[idx++]);
    queue< TreeNode*> que;
    que.push(root);
    while (!que.empty() && idx < vals.size())
    {
        TreeNode* current = que.front();
        que.pop();
        if (idx < vals.size() && vals[idx]!=NULL)
        {
            current->left = new TreeNode(vals[idx]);
            que.push(current->left);
        }
        idx++;

        if (idx < vals.size() && vals[idx] != NULL)
        {
            current->right = new TreeNode(vals[idx]);
            que.push(current->right);
        }
        idx++;

    }
    return root;
}