【LeetCode】ACM完整代码写数据结构(以树、链表为例)c++

博主现在从PTA过渡到了力扣进行刷题,近期在实习面试过程中也发现需要现场写完整代码(也就是ACM代码),从力扣注重函数实现的格式中还有点难切换出来,但是在搜索过程中这种完整代码的博客内容好少啊。于是也动手写了完整的代码和大家一起分享,平时也可以稍微练习一下,不然连头文件怎么写可能都会忘。重点在于树和链表,此篇以力扣上的题为例进行展示。由于这里仅是对完整代码进行展示,因而不对解题内容作解析。

    1. 反转链表 / 剑指 Offer 24. 反转链表
#include <iostream>
#include <vector>

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;
}
    1. 二叉树的最大深度
#include <iostream>
#include <vector>
#include <queue>

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 <iostream>
#include <vector>
#include <queue>

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<TreeNode*> 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;
}

大家一起加油吧~坚持刷题,总会有收获的!真的是熟能生巧,但是对于新的题也要逐步尝试用自己的思维敢于突破解题呀!所以也要锻炼自己举一反三的能力呢!

  • 3
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值