5.7阿里笔试第二题

构建二叉树,层序,移位
#include<iostream>
#include<vector>
#include<stack>
#include<algorithm>
using namespace std;

class MyNode
{
public:
	int val;
	MyNode* pre;
	MyNode* left;
	MyNode* right;
	int deep;

	MyNode(int v, MyNode* p, MyNode* l, MyNode* r, int d) :val(v), pre(p), left(l), right(r), deep(d)
	{
		//cout << val << "," << deep << ",";
		//if (pre == NULL)cout << "null" << ",";
		//else cout << pre->val << ",";
		//if (left == NULL)cout << "null" << ",";
		//else cout << left->val << ",";
		//if (right == NULL)cout << "null" << ",";
		//else cout << right->val << ",";
		//cout << endl;
	}
	static bool cmp(MyNode* a, MyNode* b) {
		if (a->deep < b->deep)return true;
		if (a->deep > b->deep)return false;
		return a->val < b->val;
	}
};

int main()
{
	int n, k;
	cin >> n >> k;

	vector<int> arr(n, 0);
	for (int i = 0; i<n; ++i)
	{
		cin >> arr[i];
	}
	if (n <= 2)
	{
		for (int i = 0; i + 1<n; ++i)
		{
			cout << arr[i] << " ";
		}
		cout << arr.back();
		return 0;
	}

	MyNode* root = new MyNode(arr[0], NULL,NULL, NULL,1);
	vector<MyNode*> tree;
	tree.push_back(root);
	for (int i = 1; i < n; ++i)
	{
		MyNode* cur = root;
		while (true)
		{
			if (arr[i] < cur->val)
			{
				if (cur->left == NULL)
				{
					MyNode* newn = new MyNode(arr[i], cur, NULL, NULL,cur->deep+1);
					tree.push_back(newn);
					cur->left = newn;
					break;
				}
				else
				{
					cur = cur->left;
				}
			}
			else if (arr[i] >= cur->val)
			{
				if (cur->right == NULL)
				{
					MyNode* newn = new MyNode(arr[i], cur, NULL, NULL, cur->deep + 1);
					tree.push_back(newn);
					cur->right = newn;
					break;
				}
				else
				{
					cur = cur->right;
				}
			}

		}

	}

	sort(tree.begin(), tree.end(), MyNode::cmp);
	vector<int> tmp;
	int pred = 1;
	for (int i = 0; i<n; ++i)
	{
		if (tree[i]->deep != pred)
		{
			for (int j = 0; j < tmp.size(); ++j)
			{
				cout << tmp[(j - k + tmp.size()) % tmp.size()] << " ";
			}
			tmp.clear();
			pred = tree[i]->deep;
		}
		tmp.push_back(tree[i]->val);
	}
	for (int j = 0; j < tmp.size(); ++j)
	{
		cout << tmp[(j - k + tmp.size()) % tmp.size()] << " ";
	}
	return 0;
}


#笔试题目##阿里巴巴#
全部评论
第二题题目有拍吗?可否发在评论区
点赞 回复 分享
发布于 2021-05-07 21:16

相关推荐

06-17 00:26
门头沟学院 Java
程序员小白条:建议换下项目,智能 AI 旅游推荐平台:https://github.com/luoye6/vue3_tourism_frontend 智能 AI 校园二手交易平台:https://github.com/luoye6/vue3_trade_frontend GPT 智能图书馆:https://github.com/luoye6/Vue_BookManageSystem 选项目要选自己能掌握的,然后最好能自己拓展的,分布式这种尽量别去写,不然你只能背八股文了,另外实习的话要多投,尤其是学历不利的情况下,多找几段实习,最好公司title大一点的
无实习如何秋招上岸
点赞 评论 收藏
分享
不愿透露姓名的神秘牛友
07-07 13:35
虽然不怎么光彩,经过这件事,可能我真的要去认同“面试八股文早该淘汰!不会用AI作弊的程序员=新时代文盲!”这句话了
HellowordX:Ai的出现是解放劳动力的,不是用来破坏公平竞争环境的,这样下去,轻则取消所有线上面试,严重了会影响整个行业对所有人产生影响,企业会拉高入职考核各种离谱考核会层出不穷
你找工作的时候用AI吗?
点赞 评论 收藏
分享
评论
点赞
6
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务