快上网专注成都网站设计 成都网站制作 成都网站建设
成都网站建设公司服务热线:028-86922220

网站建设知识

十年网站开发经验 + 多家企业客户 + 靠谱的建站团队

量身定制 + 运营维护+专业推广+无忧售后,网站问题一站解决

python中怎么分析循环遍历二叉树-创新互联

python中怎么分析循环遍历二叉树,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。

10年积累的成都网站设计、成都做网站经验,可以快速应对客户对网站的新想法和需求。提供各种问题对应的解决方案。让选择我们的客户得到更好、更有力的网络服务。我虽然不认识你,你也不认识我。但先网站设计制作后付款的网站建设流程,更有黑山免费网站建设让你可以放心的选择与我们合作。

前序遍历

struct Node
{
	Node*left;
	Node*right;
	int data;
	Node(){ func; }
};
Node* create(Node*p, int depth)
{	if (p && depth)
	{
		p->left = new Node;
		p->right = new Node;
		p->data = depth;
		create(p->left, depth - 1);
		create(p->right, depth - 1);
	}	if (!depth)
	{
		p->left = nullptr;
		p->right = nullptr;
		p->data = depth;
	}	return p;
}
void print1(Node*p)
{	if (p)
	{
		cout << p->data << " ";
		print1(p->left);
		print1(p->right);
	}
}
void print2(Node*head)//利用stack 模拟函数调用过程 来遍历{
	stack s;
	Node*p = head;
	{		while (p)
		{
			s.push(p);
			cout << p->data << " ";
			p = p->left;
		}		while (!s.empty())
		{
			Node*pp = s.top();			if (pp->right && pp != head)
			{
				cout << pp->right->data << " ";
			}
			s.pop();
		}
	}
	{
		p = head->right;		while (p)
		{
			s.push(p);
			cout << p->data << " ";
			p = p->left;
		}		while (!s.empty())
		{
			Node*pp = s.top();			if (pp->right
				&& pp != head)
			{
				cout << pp->right->data << " ";
			}
			s.pop();
		}
	}
}
int main()
{
	Node* head = new Node;
	create(head, 2);
	head->data = 10;
	head->left->data = 6;
	head->right->data = 14;
	head->left->left->data = 4;
	head->left->right->data = 8;
	head->right->left->data = 12;
	head->right->right->data = 16;
	print1(head);//递归遍历
	cout << endl;
	print2(head);//循环遍历
	system("pause");	return 0;
}

中序

void print2(Node*head)
{
	stack s;
	Node*p = head;
	{		while (p)
		{
			s.push(p);		//	cout << p->data << " ";
			p = p->left;
		}		while (!s.empty())
		{
			Node*pp = s.top();
			cout << pp->data << " ";			if (pp->right && pp != head  )
			{
				
				cout << pp->right->data << " ";
			}
			s.pop();
		}
	}
	{
		p = head->right;		while (p)
		{
			s.push(p);
		
			p = p->left;
		}		while (!s.empty())
		{
			Node*pp = s.top();
			cout << pp->data << " ";			if (pp->right&& pp != head)
			{
				cout << pp->right->data << " ";
			}
			s.pop();
		}
	}
}

后序

void print2(Node*head)
{
	stack s;
	Node*p = head;
	{		while (p)
		{
			s.push(p);
	
			p = p->left;		
		}		while (!s.empty())
		{
			Node*pp = s.top();	
			if (pp->right && pp != head  )
			{
				
				cout << pp->right->data << " ";
			}	
			if ( pp != head)
			cout << pp->data << " ";
			s.pop();
		}
	}
	{
		p = head->right;		while (p)
		{
			s.push(p);
			p = p->left;
		}		while (!s.empty())
		{
			Node*pp = s.top();		
			if (pp->right&& pp != head)
			{
				cout << pp->right->data << " ";
			}	
			cout << pp->data << " ";
			s.pop();
		}
	}
	cout << head->data << " ";
}

看完上述内容是否对您有帮助呢?如果还想对相关知识有进一步的了解或阅读更多相关文章,请关注创新互联-成都网站建设公司行业资讯频道,感谢您对创新互联的支持。


网站栏目:python中怎么分析循环遍历二叉树-创新互联
链接分享:http://6mz.cn/article/echdo.html

其他资讯