我是靠谱客的博主 幽默路人,最近开发中收集的这篇文章主要介绍二叉树遍历 递归/非递归 模板(??),觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

递归版

void First_order_traversal(int i) //先序
{
	printf("%dn", key[i]);
	First_order_traversal(lc[i]);
	First_order_traversal(rc[i]);
}
void Sequential_traversal(int i) //中序
{
	Sequential_traversal(lc[i]);
	printf("%dn", key[i]);
	Sequential_traversal(rc[i]);
}
void Post_order_traversal(int i) //后序
{
	Post_order_traversal(lc[i]);
	Post_order_traversal(rc[i]);
	printf("%dn", key[i]);
}

非递归版

int vis[MAXN], lc[MAXN], rc[MAXN], key[MAXN];
void First_order_traversal(int i)
{
	stack<int> st;
	st.push(i);
	while(!st.empty())
	{
		i = st.top(); st.pop();
		printf("%dn", key[i]);
		if(rc[i]) st.push(rc[i]);
		if(lc[i]) st.push(lc[i]);
	}
}
void Sequential_traversal(int i)
{
	stack<int> st;
	st.push(i);
	while(!st.empty())
	{
		if(!(i=st.top())) { st.pop(); continue; }
		i = st.top(); vis[i]++;
		if(vis[i] == 1) st.push(lc[i]);
		else if(vis[i] == 2) printf("%dn", key[i]), st.push(rc[i]);
		else st.pop();
	}
}
void Post_order_traversal(int i)
{
	stack<int> st;
	st.push(i);
	while(!st.empty())
	{
		if(!(i=st.top())) { st.pop(); continue; }
		vis[i]++;
		if(vis[i] == 1) st.push(lc[i]);
		else if(vis[i] == 2) st.push(rc[i]);
		else printf("%dn", key[i]), st.pop();
	}
}

最后

以上就是幽默路人为你收集整理的二叉树遍历 递归/非递归 模板(??)的全部内容,希望文章能够帮你解决二叉树遍历 递归/非递归 模板(??)所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(44)

评论列表共有 0 条评论

立即
投稿
返回
顶部