今天在看创建二叉树,于是找了一些代码运行了一些,期间也出现了一些错误,在代码中间标注了!!
#include<stdlib.h>
#include<malloc.h>
#include<iostream>
#include<stdio.h>
#include<string.h>
using namespace std;
typedef char ElemType;
typedef struct BtNode{
BtNode *leftchild;
BtNode *rightchild;
ElemType data;
}BtNode,*BinaryTree;
//购买结点-------其实就是初始化一个结点,至于博客中为啥叫购买结点,咱也不知道,也不敢问
BtNode *BuyNode(){
BtNode *p=(BtNode *)malloc(sizeof(BtNode));
if(NULL==p) exit(1);
memset(p,0,sizeof(BtNode));
return p;
}
void *Freenode(BtNode *ptr)
{
free(ptr);
}
//方法一:前序创建二叉树 通过传入结点创建二叉树
void *PreCreateTree(BinaryTree *ptr)
{
char ch;
cin>>ch;
if(ch!='#'||ptr!=NULL){
*ptr=BuyNode();
(*ptr)->data=ch;//给树的数据部分赋值
PreCreateTree(&(*ptr)->leftchild);//递归的思想 创建左子树
PreCreateTree(&(*ptr)->rightchild);//递归创建右子树
}
}
//第二种创建方法 通过传入指针创建二叉树
void Createtree4(BtNode **const p,char *&str)
{
if(str!=NULL && *str!='#')
{
(*p)=BuyNode();
(*p)->data=*str;
//当时这一步敲错了,出现了"expected primary-expression before'('的错误"
//(*)p=BuyNode();
//(*)p->data=*str;
Createtree4(&(*p)->leftchild,++str);//传入的是一个指针类型的引用
Createtree4(&(*p)->rightchild,++str);
}
}
//第三种创建方法 通过传入空参数创建
BtNode *CreateTree(){
ElemType x;
BtNode *s=NULL;
cin>>x;
if(x!='#'){
s=BuyNode();
s->data=x;
s->leftchild=CreateTree();
s->leftchild=CreateTree();
}
return s;
}
//第四种 通过传入引用来创建一颗树
BtNode *Createtree1(char *&str)
{
BtNode *p=NULL;
if(str!=NULL&&*str!='#'){
p=BuyNode();
p->data=*str;
p->leftchild=Createtree1(++str);
p->rightchild=Createtree1(++str);
}
return p;
}
int main(){
BinaryTree root=NULL;
PreCreateTree(&root);
return 0;
}
[添加链接描述](https://blog.youkuaiyun.com/lingling_nice/article/details/80960439)```