二叉树的层序遍历

二叉树的层序遍历,第1张

二叉树的层序遍历 二叉树的层序遍历

二叉树节点结构

struct TreeNode {
	int val;
	struct TreeNode* left, * right;
	TreeNode() {
		val = 0;
		left = right = nullptr;
	}
	TreeNode(int x) :val(x) {
		left = right = nullptr;
	}
	TreeNode(int x, struct TreeNode* leftnode, struct TreeNode* rightnode) :val(x), left(leftnode), right(rightnode) { }
};

层序遍历

void LevelOrderVisit(TreeNode* root) {
	if ( root == nullptr ) {		// 空树
		return ;
	}
	vector vec_0 = { root };		// 当前层节点
	while (1) {
		vector vec_1;		// 下一层节点
		for (auto i : vec_0) {
			if (i->left != nullptr)
				vec_1.push_back(i->left);
			if (i->right != nullptr) {
				vec_1.push_back(i->right);
			}
			cout << i->val << ' ';		// 打印节点值
		}
		cout << endl;
		if (vec_1.size() == 0) {		// 下一层节点为空时跳出
			break;
		}
		vec_0 = vec_1;		// 下一层迭代
	}
}



vector > LevelOrderVisit(TreeNode* root) {
	vector > nodes;		// 存储每一层节点值,并返回
	vector vec_0 = { root };		// 当前层节点
	while (1) {
		vector vec_1;		// 下一层节点
		vector cur;		// 当前节点值
		for (auto i : vec_0) {
			if (i->left != nullptr)
				vec_1.push_back(i->left);
			if (i->right != nullptr) {
				vec_1.push_back(i->right);
			}
			cur.push_back(i->val);
		}
		nodes.push_back(cur);
		if (vec_1.size() == 0) {		// 下一层节点为空时跳出
			break;
		}
		vec_0 = vec_1;		// 下一层迭代
	}
	return nodes;
}

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5670326.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-16
下一篇 2022-12-16

发表评论

登录后才能评论

评论列表(0条)

保存