二叉树非递归遍历

二叉树非递归遍历

1 前序遍历

void preorder(TreeNode *root, vector<int>& res)
{
	stack< pair<TreeNode*, bool> > s;
	s.push(make_pair(root, false));
	bool visited;
	while(!s.empty()) {
		root = s.top().first;
		visited = s.top().second;
		s.pop();
		if(root == NULL) {
			continue;
		}
		if(visited) {
			res.push_back(root->val);
		} else {
			s.push(make_pair(root->right, false));
			s.push(make_pair(root->left, false));
			s.push(make_pair(root, true));
		}
	}
}

2 中序遍历

void inorder(TreeNode *root, vector<int>& res)
{
	stack< pair<TreeNode*, bool> > s;
	s.push(make_pair(root, false));
	bool visited;
	while(!s.empty()) {
		root = s.top().first;
		visited = s.top().second;
		s.pop();
		if(root == NULL) {
			continue;
		}
		if(visited) {
			res.push_back(root->val);
		} else {
			s.push(make_pair(root->right, false));
			s.push(make_pair(root, true));
			s.push(make_pair(root->left, false));
		}
	}
}

3 后序遍历

void postorder(TreeNode *root, vector<int>& res)
{
	stack< pair<TreeNode*, bool> > s;
	s.push(make_pair(root, false));
	bool visited;
	while(!s.empty()) {
		root = s.top().first;
		visited = s.top().second;
		s.pop();
		if(root == NULL) {
			continue;
		}
		if(visited) {
			res.push_back(root->val);
		} else {
			s.push(make_pair(root, true));
			s.push(make_pair(root->right, false));
			s.push(make_pair(root->left, false));
		}
	}
}
posted @ 2020-07-29 10:20  Amoswish  阅读(94)  评论(0编辑  收藏  举报