C语言 通过中序遍历和后序遍历创建二叉树
如题,但是传递地址老是不对,该怎么改啊。
求帮助啊,谢谢谢谢!!
#include <stdio.h>
#include <string.h>
#define ElementType char
/*-----------------------------------------*/
//定义二叉树结构
//typedef struct TreeNode *BinTreeNode;
//typedef BinTree Position;
typedef struct TreeNode {
ElementType TData;
struct TreeNode *Left;
struct TreeNode *Right;
}BinTreeNode;
/*------------------------------------------*/
//函数声明部分
/*-----------------------------------------
-- 功能函数:由中序遍历和后续遍历得到树
-----------------------------------------*/
void TreeFrom_In_Post(BinTreeNode *TreeNode, char InOrder[], char PostOrder[], int lowInRange,int highInRange,int lowPostRange,int highPostRange)
{
TreeNode=(BinTreeNode *)malloc(sizeof(BinTreeNode));
TreeNode->TData=PostOrder[highPostRange];//记录树的根节点
TreeNode->Left=NULL;
TreeNode->Right=NULL;
//printf("%d\n",&TreeNode) ;
int root=lowInRange;
while(InOrder[root] != PostOrder[highPostRange]) //计算中序遍历中根节点的位置
{
root++;
}
int left_tree_length=root-lowInRange; //树中左子树长度
if(root>lowInRange) //遍历构建左子树
{//中序遍历和后续遍历中的左子树构建
TreeFrom_In_Post(TreeNode->Left,InOrder,PostOrder,lowInRange,root-1,lowPostRange,lowPostRange+left_tree_length-1);
}
if(root<highInRange) //遍历右子树
{//中序遍历和后续遍历中的左子树构建
TreeFrom_In_Post(TreeNode->Right,InOrder,PostOrder,root+1,highInRange,lowPostRange+left_tree_length,highPostRange-1);
}
}
/*-----------------------------------------
-- 功能函数:先序遍历
-----------------------------------------*/
void PreOrderTraversal (BinTreeNode *BT)
{
if(BT!=NULL){
printf("%c",BT->TData);
PreOrderTraversal (BT->Left);
PreOrderTraversal (BT->Right);
}
}
/*-----------------------------------------
-- 功能函数:中序遍历
-----------------------------------------*/
void InOrderTraversal (BinTreeNode *BT)
{
if(BT!=NULL){
InOrderTraversal (BT->Left);
printf("%c",BT->TData);
InOrderTraversal (BT->Right);
}
}
/*-----------------------------------------
-- 功能函数:后序遍历
-----------------------------------------*/
void PostOrderTraversal (BinTreeNode *BT)
{
if(BT!=NULL){
PostOrderTraversal (BT->Left);
PostOrderTraversal (BT->Right);
printf("%c",BT->TData);
}
}
/*-----------------------------------------
-- 功能函数:主函数
-----------------------------------------*/
int main()
{
char a[80],b[80];
BinTreeNode NewTree;
//NewTree=(BinTreeNode *)malloc(sizeof(BinTreeNode *));
printf("请先输入树的中序遍历结果,回车后输入后序遍历结果。\n");
printf("请输入中序遍历序列:");
gets(a);
printf("请输入后序遍历序列:");
gets(b);
TreeFrom_In_Post(&NewTree, a, b, 0,strlen(a)-1,0,strlen(b)-1);
//printf("main: %d",&NewTree);
printf("\n前序遍历结果:");
PreOrderTraversal (&NewTree);
printf("\n中序遍历结果:");
InOrderTraversal (NewTree);
printf("\n后序遍历结果:");
PostOrderTraversal (NewTree);
return 0;
}

求帮助啊,谢谢谢谢!!

#include <stdio.h>
#include <string.h>
#define ElementType char
/*-----------------------------------------*/
//定义二叉树结构
//typedef struct TreeNode *BinTreeNode;
//typedef BinTree Position;
typedef struct TreeNode {
ElementType TData;
struct TreeNode *Left;
struct TreeNode *Right;
}BinTreeNode;
/*------------------------------------------*/
//函数声明部分
/*-----------------------------------------
-- 功能函数:由中序遍历和后续遍历得到树
-----------------------------------------*/
void TreeFrom_In_Post(BinTreeNode *TreeNode, char InOrder[], char PostOrder[], int lowInRange,int highInRange,int lowPostRange,int highPostRange)
{
TreeNode=(BinTreeNode *)malloc(sizeof(BinTreeNode));
TreeNode->TData=PostOrder[highPostRange];//记录树的根节点
TreeNode->Left=NULL;
TreeNode->Right=NULL;
//printf("%d\n",&TreeNode) ;
int root=lowInRange;
while(InOrder[root] != PostOrder[highPostRange]) //计算中序遍历中根节点的位置
{
root++;
}
int left_tree_length=root-lowInRange; //树中左子树长度
if(root>lowInRange) //遍历构建左子树
{//中序遍历和后续遍历中的左子树构建
TreeFrom_In_Post(TreeNode->Left,InOrder,PostOrder,lowInRange,root-1,lowPostRange,lowPostRange+left_tree_length-1);
}
if(root<highInRange) //遍历右子树
{//中序遍历和后续遍历中的左子树构建
TreeFrom_In_Post(TreeNode->Right,InOrder,PostOrder,root+1,highInRange,lowPostRange+left_tree_length,highPostRange-1);
}
}
/*-----------------------------------------
-- 功能函数:先序遍历
-----------------------------------------*/
void PreOrderTraversal (BinTreeNode *BT)
{
if(BT!=NULL){
printf("%c",BT->TData);
PreOrderTraversal (BT->Left);
PreOrderTraversal (BT->Right);
}
}
/*-----------------------------------------
-- 功能函数:中序遍历
-----------------------------------------*/
void InOrderTraversal (BinTreeNode *BT)
{
if(BT!=NULL){
InOrderTraversal (BT->Left);
printf("%c",BT->TData);
InOrderTraversal (BT->Right);
}
}
/*-----------------------------------------
-- 功能函数:后序遍历
-----------------------------------------*/
void PostOrderTraversal (BinTreeNode *BT)
{
if(BT!=NULL){
PostOrderTraversal (BT->Left);
PostOrderTraversal (BT->Right);
printf("%c",BT->TData);
}
}
/*-----------------------------------------
-- 功能函数:主函数
-----------------------------------------*/
int main()
{
char a[80],b[80];
BinTreeNode NewTree;
//NewTree=(BinTreeNode *)malloc(sizeof(BinTreeNode *));
printf("请先输入树的中序遍历结果,回车后输入后序遍历结果。\n");
printf("请输入中序遍历序列:");
gets(a);
printf("请输入后序遍历序列:");
gets(b);
TreeFrom_In_Post(&NewTree, a, b, 0,strlen(a)-1,0,strlen(b)-1);
//printf("main: %d",&NewTree);
printf("\n前序遍历结果:");
PreOrderTraversal (&NewTree);
printf("\n中序遍历结果:");
InOrderTraversal (NewTree);
printf("\n后序遍历结果:");
PostOrderTraversal (NewTree);
return 0;
}
...全文
相关推荐
二叉树创建与遍历实验报告
**遍历二叉树**:二叉树的遍历主要有三种方式,即先序遍历、中序遍历和后序遍历。这三种遍历方法各有其特点,用于不同的应用场景。
C语言二叉树创建与遍历
今天,我们将讨论如何使用C语言创建和遍历二叉树。
二叉树的创建与遍历C语言实现
二叉树是一种在计算机科学中广泛应用的数据结构,它是由节点(或称为顶点)组成,每个节点最多有两个子节点,通常被分为左子节点和右子节点。在本主题中,我们将深入探讨如何使用C语言来创建和遍历二叉树。
二叉树遍历实验报告
**实验目标:**- 学习二叉树的基本性质和数据结构;- 创建一棵二叉树,并实现其前序、中序、后序遍历以及层次遍历;- 计算二叉树的深度和叶子节点的数量;- 测试程序,并展示实验结果。
c语言版本二叉树基本操作示例(先序 递归 非递归)
在本文中,我们将探讨如何在C语言中实现二叉树的基本操作,包括创建、先序、中序、后序以及层序遍历。这些遍历方法既可以通过递归方式,也可以通过非递归方式实现。


