二叉树:已知前/后/中序,建立二叉树并输出

这篇博客探讨了如何利用递归根据已知的二叉树前序、中序或后序遍历结果重建完整的二叉树。文章详细解释了利用中序和后序输出前序遍历的原理,指出在中序遍历中,前序的第一个节点是根节点;在后序遍历中,最后一个节点是根节点。通过递归地寻找左右子树并在适当位置插入,可以构建出二叉树。作者还提供了一段包含二叉树定义、构建函数和前序遍历输出的代码示例,并补充了如何根据已知前序和中序遍历来输出后序遍历的方法。
摘要由CSDN通过智能技术生成

由中序和后序输出前序

显而易见,可以用递归实现:
由二叉树的定义可知,已知前序和中序,或者后序和中序均可以求出整个二叉树

原理:
前序+中序:前序的第一个节点必定为根节点,找到前序的第一个节点在中序中的位置
此时,在中序中,此节点左边为左子树,右边为右子树,以此类推,可以根据递归的思想进行实现

同理,后序+中序:后序的最后一个节点必定为根节点,找到后序的最后一个节点在中序中的位置,左边为左子树,右边为右子树…

递归结束条件:此节点既无左子树又无右子树

首先进行二叉树的定义:

typedef struct bitnode
{
   
    ElementType data;
    struct bitnode*left,*right;
}bitnode,*bitree;

然后是函数(由中序和后序求得二叉树)

bitree CreateTree(int *End,int *Mid,int n)      //根据后序和中序建立二叉树
{
   
    bitree T;               //root节点,新二叉树的根节点
    T = (bitree)malloc(sizeof(bitnode));
    if(n<=0)
        return NULL;
    int *p = Mid;           //定义一个指针指向中序开头
    while(*p!=*(End+n-1))           //让指针指向后序的最后一个节点,这个节点是中序的头节点,左边为左树,右边为右数
    {
   
        p++;
    }
    T->data = *p;         //把后序的最后一个节点的值给根节点,从此开始递归判断
    int len = p - Mid;      //长度
    T->left = CreateTree(End,Mid,len);
    T->right = CreateTree(End+len,Mid+len+1,n-len-1);
    return T;
}

前序遍历二叉树并输出:

void Order(bitree T)
{
   
    if(T)
    {
   
        cout<<" "<<T->data;
        Order(T->left);
        Order(T->right);
    }
}

主函数:

int main
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值