- 根据先序序列创建树
- 先序后序序列创建树
- 后序中序序列创建树
二叉树节点的结构体如下:
typedef char ElemType;
typedef struct Node
{
ElemType val;
Node* lTree;
Node* rTree;
}Node;
1、根据先序序列创建树
只通过先序序列创建二叉树,序列必须是满二叉树的形式,因此没有元素的节点必须用特殊字符补齐,例如:"#"。
思路:
- 首先申请节点存放当前元素。
- 递归创建左子树
- 递归创建右子树
代码如下:
Node* PreCreate(ElemType* &str)
{
Node *s = NULL;
while (*str != '#')
{
s = BuyNode();
s->val = *str;
s->lTree = PreCreate(++str);
s->rTree = PreCreate(++str);
}
return s;
}
注意:形参必须传地址的引用,否则递归过程总对指针的++操作会无效。
2、先序中序序列创建树
思路:
- 先序序列的第一个节点为根节点
- 在中序序列找根节点的位置,该位置左边即为左子树的节点,右边为右子树的节点。
- 递归创建左子树和右子树
代