数组生成树,用于leetcode本地测试|c++

前言

        在leetcode做题时,一些关于树的题目,在本地编译器很难调试,主要的原因是无法获得测试用例。这也是长期困扰笔者的一个问题,所以“被迫”实现了用 vector 数组建树的代码,方便生成想要的测试用例。这里把它分享出来,或许你也需要。

代码

TreeNode * createTree(vector<int>v) {
	if (v.empty()) {
		return nullptr;
	}
	//使用逐层遍历的方式,生成树
	queue<TreeNode*>q;
	TreeNode* root = new TreeNode(v[0]);
	q.push(root);
	int idx = 1;//用以表示当前数组可用的元素下标
	while (!q.empty()&&idx<v.size()) {
		int cnt = q.size();
		for (int i = 1; i <= cnt; i++) {
			TreeNode* cur = q.front();
			q.pop();
			//判断左子树是否为空
			if (v[idx] != -1) {
				TreeNode* t = new TreeNode(v[idx]);
				cur->left = t;
				q.push(cur->left);
			}
			idx++;
			if (idx >= v.size()) {
				break;
			}
			//判断右子树是否为空
			if (v[idx] != -1) {
				TreeNode* t = new TreeNode(v[idx]);
				cur->right = t;
				q.push(cur->right);
			}
			idx++;
		}
	}
	return root;
}

//main函数中调用代码
int main() {
	/*
	-1表示空节点,也就意味着val不能等于-1;
	当然你可以稍微改一下createTree的源码,以实现你的个性要求

	输入数据形如 vector<int>v = {1,2,3,-1,-1,4,5} 最后一层的叶子节点的空节点不用指明
	*/
	vector<int>v = {1,2,3,-1,-1,4,5};
	TreeNode* root=createTree(v);//root就是测试用例的根节点
	
	Solution *temp = new Solution();
	temp->connect(root);

	return 0;
}


使用说明

  • 步骤
  1. 把createTree函数复制到自己的main函数前
  2. 在main函数中,改动数组 v 的初始化元素,以建成自己想要的树
  • 数组 v 元素要怎么推算呢?如下图的树,
    树的结构图
    vector<int>v = {3,9,20,-1,-1,15,7};
  • 即节点 9 的两个子节点为空,要用 -1 指明;而节点 15 和节点 7 不需要,因为它们已经是最后一层了。
  • 如果你熟悉 leetcode 的用例输入,那么只是把其中的 null 改成 -1就可以了

写在后面

  • 代码的正确性自测ok,但数据量不大,不排除有未知的 bug 存在。请谅解,谢谢!
  • 如有不足或高见,欢迎交流。交流使我们更有力量!


    -------------------------------------------------- end!-----------------------------------------------------
  • 5
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值