打印
打印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;
}