根据二叉树的前序遍历和中序遍历构建二叉树的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语言根据层次遍历和中序遍历求二叉树的前序遍历和后序遍历。下面有我的建树函数,有注释的。

二叉树进阶题------前序遍历和中序遍历构造二叉树;中序遍历和后序遍历构造二叉树

二叉树进阶题------前序遍历和中序遍历构造二叉树;中序遍历和后序遍历构造二叉树

python根据二叉树的前序遍历和中序遍结果历重建二叉树

题目:输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树

N4-某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。