二叉树的创建
我们这里使用三种方法创建二叉树:
- 根据先序创建二叉树
- 根据先序中序创建二叉树
- 根据中序后序创建二叉树
①:二叉树的节点定义:

②:购买二叉树节点内存

③:释放二叉树节点内存

一:根据先序创建二叉树
思路:
- 申请节点并将当前元素赋值
- 递归创建其左子树,参数传字符串下一个元素地址
- 递归创建其右子树,参数传字符串下下一个元素地址
特别注意:这里传入的字符串指针是引用类型,要让其动起来,要不递归的时候++,将不会有任何作用
代码如下:
//按顺序一个一个加载进树里
BtNode *CreateTree(ELEMTYPE * &ptr) //这块传指针的引用 是因为要让数组一直++下去,要不然值传递,导致只能在前几个循环
{
BtNode *pnewnode = NULL;
if(ptr!=NULL && *ptr!=END)
{
pnewnode = BuyNode();
pnewnode->data = *ptr;
pnewnode->leftchild = CreateTree(++ptr);
pnewnode->rightchild = CreateTree(++ptr);
}
return pnewnode;
}
二:根据先序中序创建二叉树
思路:
- 我们知道先序序列的第一个节点为根节点
- 通过FindPos函数找到传入根节点的值找到在中序序列中对应的位置pos
- 再根据这个位置pos,递归创建左子树和右子树
代码如下:
//前中序创建二叉树
//1.FindPos找到节点所在位置 将左右递归进去
int FindPos(ELEMTYPE *in, ELEMTYPE val, int n)
{
if(NULL == in) return -1;
int pos = -1;
for(int i=0; i<n; i++)
{
if(in[i] == val)
{
pos = i;
}
}
return pos;
}
BtNode* PreInCreate(ELEMTYPE *pre, ELEMTYPE *in, int n)
{
BtNode *pnewnode = NULL;
if(n > 0)
{
pnewnode = BuyNode();
pnewnode->data = pre[0];
int pos = FindPos(in, pnewnode->data, n);
if(pos == -1) exit(1);
pnewnode->leftchild = PreInCreate(pre+1, in, pos);
pnewnode->rightchild = PreInCreate(pre+pos+1, in+pos+1, n-pos-1);
}
return pnewnode;
}
BtNode* CreatePI(ELEMTYPE *pre, ELEMTYPE *in, int n)
{
if(NULL == pre || NULL == in || n < 1)
{
return NULL;
}
return PreInCreate(pre, in, n);
}
三:根据中序后序创建二叉树
思路:
- 我们知道后序序列的最后一个节点为根节点
- 通过FindPos函数找到传入根节点的值找到在中序序列中对应的位置pos
- 再根据这个位置pos,递归创建左子树和右子树
代码如下:
//中后序创建二叉树
BtNode *InLastCreate(ELEMTYPE *in, ELEMTYPE *last, int n)
{
BtNode *pnewnode = NULL;
if(n > 0)
{
pnewnode = BuyNode();
pnewnode->data = last[n-1];
int pos = FindPos(in, pnewnode->data, n);
if(n == -1) exit(1);
pnewnode->leftchild = InLastCreate(in, last, pos);
pnewnode->rightchild = InLastCreate(in+pos+1, last+pos, n-pos-1);
}
return pnewnode;
}
BtNode* CreateIL(ELEMTYPE *in, ELEMTYPE *last, int n)
{
if(NULL == in || NULL == last || n < 1)
{
return NULL;
}
return InLastCreate(in, last, n);
}

本文介绍了三种创建二叉树的方法:根据先序创建、先序中序创建以及中序后序创建。详细讲解了每种方法的思路,并给出了相应的代码实现,包括二叉树节点的定义、内存管理和递归创建过程。
1978





