void preorder1(Node *root) //递归前序遍历
{
	if (root == NULL) return;
	printf("%d ", root->val);
	preorder1(root->left);
	preorder1(root->right);
}
void inorder1(Node *root) //递归中序遍历
{
	if (root == NULL) return;
	inorder1(root->left);
	printf("%d ", root->val);
	inorder1(root->right);
}
void postorder1(Node *root) //递归后序遍历
{
	if (root == NULL) return;
	postorder1(root->left);
	postorder1(root->right);
	printf("%d ", root->val);
}
void preorder2(Node *root)//非递归前序遍历
{
	if (root == NULL) return;
	stack<Node *> stk;
	stk.push(root);
	while (!stk.empty())
	{
		Node *p = stk.top(); stk.pop();
		printf("%d ", p->val);
		if (p->right) stk.push(p->right);
		if (p->left) stk.push(p->left);
	}
}void postorder2(Node *root)//非递归后序遍历,利用两个栈
{
	if (root == NULL) return;
	stack<Node *> stk, stk2;
	stk.push(root);
	while (!stk.empty())
	{
		Node *p = stk.top(); stk.pop();
		stk2.push(p);
		if (p->left) stk.push(p->left);
		if (p->right) stk.push(p->right);
	}
	while(!stk2.empty())
	{
		printf("%d ", stk2.top()->val);
		stk2.pop();
	}
}void inorder2(Node *root)//非递归中序遍历
{
	stack<Node *> stk;
	Node *p = root;
	while (p != NULL || !stk.empty())
	{
		if (p != NULL)
			stk.push(p), p = p->left;
		else
		{
			p = stk.top(); stk.pop();
			printf("%d ", p->val);
			p = p->right;
		}
	}
}void uptodown(Node *root)
{
	if(root == NULL)
		return;
	queue<Node *> Q;
	Q.push(root)
	while(!Q.empty())
	{
		Node *p = Q.front();
		printf("%d ",p->value);
		Q.pop();
		Q.push(p->left);
		Q.push(p->right);
	}
}
版权声明:本文为博主原创文章,未经博主允许不得转载。
原文地址:http://blog.csdn.net/csdnjack_/article/details/48087677