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

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

    1. 反转链表 / 剑指 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;
}
    1. 二叉树的最大深度
#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;
}

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

你可能感兴趣的:(算法刷题总结,链表,数据结构,c++)