如题,但是传递地址老是不对,该怎么改啊。
求帮助啊,谢谢谢谢!!
#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;
}