根据二叉树的前序遍历和中序遍历构建二叉树的c语言完整代码
Posted xulu_258
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了根据二叉树的前序遍历和中序遍历构建二叉树的c语言完整代码相关的知识,希望对你有一定的参考价值。
//重建二叉树:输入某二叉树的前序和中序遍历,重建出该二叉树
#include<stdio.h>
#include<malloc.h>
typedef struct binarytreenode
int value;
struct binarytreenode *left;
struct binarytreenode *right;
binary;
binary* constructcore(int *startpreorder,int *endpreorder,int *startinorder,int *endinorder)
int *rootinorder=NULL;
int leftlength =0; //左子树的长度
int * leftpreend =NULL; //前序遍历中左子树的终结点
int rootvalue=startpreorder[0]; //前序遍历中的第一个结点的值便是根节点的值
binary *root = malloc(sizeof(binary));
root->value=rootvalue;
root->left=root->right=NULL;
if(startpreorder==endpreorder)
if(startinorder==endinorder&& *startpreorder==*startinorder) //前序遍历和中序遍历中都只有根节点的情况
return root;
else
printf("invalid input\\n");
// return root;
//在中序遍历中找到根节点的值
rootinorder = startinorder;
while(rootinorder<=endinorder&& *rootinorder != rootvalue)
++rootinorder;
if(rootinorder==endinorder&& *rootinorder != rootvalue)
printf("invalid input");
leftlength = rootinorder-startinorder;
leftpreend = startpreorder + leftlength;
if(leftlength>0)
root->left = constructcore(startpreorder+1,leftpreend,startinorder,rootinorder-1); //构建左子树
if(leftlength < endpreorder-startpreorder)
root->right = constructcore(leftpreend+1,endpreorder,rootinorder+1,endinorder);
return root;
binary *construct(int *preorder,int *inorder,int length)
if(preorder==NULL||inorder==NULL||length<=0)
return NULL;
else
return constructcore(preorder,preorder+length-1,inorder,inorder+length-1);
int main()
int preorder[]=1,2,4,7,3,5,6,8;
int inorder[]=4,7,2,9,5,3,8,6;
binary *root;
root=construct(preorder,inorder,8);
printf("%d\\n",root->value);
return 0;
以上是关于根据二叉树的前序遍历和中序遍历构建二叉树的c语言完整代码的主要内容,如果未能解决你的问题,请参考以下文章
C语言根据层次遍历和中序遍历求二叉树的前序遍历和后序遍历。下面有我的建树函数,有注释的。
二叉树进阶题------前序遍历和中序遍历构造二叉树;中序遍历和后序遍历构造二叉树
二叉树进阶题------前序遍历和中序遍历构造二叉树;中序遍历和后序遍历构造二叉树