博主现在从PTA过渡到了力扣进行刷题,近期在实习面试过程中也发现需要现场写完整代码(也就是ACM代码),从力扣注重函数实现的格式中还有点难切换出来,但是在搜索过程中这种完整代码的博客内容好少啊。于是也动手写了完整的代码和大家一起分享,平时也可以稍微练习一下,不然连头文件怎么写可能都会忘。重点在于树和class="superseo">链表,此篇以力扣上的题为例进行展示。由于这里仅是对完整代码进行展示,因而不对解题内容作解析。
-
- 反转链表 / 剑指 Offer 24. 反转链表
#include
#include
using namespace std;
struct ListNode{
int val;
ListNode* next;
ListNode(int x):val(x),next(NULL){}
};
ListNode* create(vector<int> arr){
int i;
ListNode *p,*head,*pre;
head = new ListNode(0); //给一个初始值0
pre = head;
for(i = 0;i< arr.size();i++){
p = new ListNode(arr[i]);
pre->next = p;
pre = p;
}
return head;
}
int main()
{
int arr[] = {5,4,3,2,1,0};
vector<int> v(arr,arr+sizeof(arr)/sizeof(int)); //把int型数组转化为vector,注意这里的转化方式
ListNode* L = create(v);
L = L->next; //要有这步,否则要在create函数中返回head->next即L指向头结点
while(L!=NULL){
cout<< L->val;
L = L->next;
}
return 0;
}
-
- 二叉树的最大深度
#include
#include
#include
using namespace std;
struct TreeNode{
int val;
TreeNode* left;
TreeNode* right;
TreeNode(int x):val(x),left(NULL),right(NULL){};
};
int getDepth(TreeNode* root){
if(root == NULL) return 0; //注意终止条件
int leftDepth = getDepth(root->left);
int rightDepth = getDepth(root->right);
int len = 1 + max(leftDepth, rightDepth);
return len;
}
TreeNode* createTree(vector<int> v){
TreeNode **nodes = new TreeNode*[v.size()]; //这步查了很多方法才解决的
//将int数据转换为TreeNode节点
for (int i = 0; i < v.size(); i++)
{
nodes[i] = new TreeNode(v[i]);
}
queue<TreeNode*> nodeQueue;
nodeQueue.push(nodes[0]);
TreeNode *node;
#include
#include
#include
using namespace std;
struct TreeNode{
int val;
TreeNode* left;
TreeNode* right;
TreeNode(int x):val(x),left(NULL),right(NULL){};
};
int getDepth(TreeNode* root){
if(root == NULL) return 0; //注意终止条件
int leftDepth = getDepth(root->left);
int rightDepth = getDepth(root->right);
int len = 1 + max(leftDepth, rightDepth);
return len;
}
TreeNode* createTree(vector<int> v){
TreeNode **nodes = new TreeNode*[v.size()];
//vector nodes;
//将int数据转换为TreeNode节点
for (int i = 0; i < v.size(); i++)
{
nodes[i] = new TreeNode(v[i]);
}
queue<TreeNode*> nodeQueue;
nodeQueue.push(nodes[0]);
TreeNode *node;
int index = 1;
while (index < v.size())
{
node = nodeQueue.front();
nodeQueue.pop();
nodeQueue.push(nodes[index++]);
node->left = nodeQueue.back();
nodeQueue.push(nodes[index++]);
node->right = nodeQueue.back();
}
return nodes[0];
}
int main()
{
int arr[] = {3,9,20,NULL,NULL,15,7};
vector<int> v(arr,arr+sizeof(arr)/sizeof(int));
TreeNode* root = createTree(v);
int depth = getDepth(root);
cout<<depth;
return 0;
}
大家一起加油吧~坚持刷题,总会有收获的!真的是熟能生巧,但是对于新的题也要逐步尝试用自己的思维敢于突破解题呀!所以也要锻炼自己举一反三的能力呢!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)