通过层序遍历和中序遍历构建二叉树

通过层序遍历中序遍历构建二叉树的过程与通过中序遍历先序遍历构建二叉树的过程很相似。

先序遍历和中序遍历是通过先序遍历的首个元素确定根节点,再根据这个元素在中序遍历中出现的位置分为左子树和右子树,然后递归实现。

层序遍历和中序遍历构建二叉树的过程也可以进行仿照。

层序遍历中的首个元素在中序遍历中的位置会将中序遍历划分为左子树和右子树。左子树和右子树也会被层序遍历中的下一个元素继续划分。

#include
using namespace std;
struct TreeNode
{
	int val;
	TreeNode *lchild;
	TreeNode *rchild;
};//创造结构体
int midn;
const int maxn=100;
int mid[maxn]={0};
int layer[maxn]={0};
TreeNode * createbymidlayer(int midl,int midr)
{
	if(midl>midr)//边界条件归纳,若midl>midr,说明节点为空
	return NULL;
	int i,j;
	int flag=0;
	for(i=0;ival=layer[i];
	root->lchild=createbymidlayer(midl,j-1);//进行分治
	root->rchild=createbymidlayer(j+1,midr);
	return root;
}
void dfs(TreeNode *root)//先序遍历输出进行验证
{
	if(!root)
	return ;
	printf("%d",root->val);
	dfs(root->lchild);
	dfs(root->rchild);
}
int main()
{
	scanf("%d",&midn);
	for(int i=0;i

你可能感兴趣的:(算法学习,数据结构,算法)