• 先序中序建立二叉树的递归算法


    其先序序列的第一个元素为根节点,接下来即为其左子树先序遍历序
    列,紧跟着是右子树先序遍历序列,故根节点已可从先序序列中分离。在中序序列中找
    到 确定的根节点,根据中序遍历特性,在巾序序列中,根节点前面的序列即为左子树
    的中序遍历序列,根节点后面的即为右子树的中序遍历序列。由左右子树的中序序列长
    度,在该二叉树的先序序列中即可找到左右子树的先序序列的分界点,从而得到二叉树
    的左右子树的先序序列。
    递归实现: 
    递归函数输入:二叉树的先序序列和中序序列;返回-、建好的二叉树的根节点。
    算法思想:
    1)若二叉树空,返回空;
    2)若不空,取先序序列第一个元素,建立根节点;
    3)在中序序列中查找根节点,以此确定左右子树的先序序列和中序序列;
    4)递归调用自己,建左子树;
    5)递归调用自己,建右子树。

    void createBiTree(linkshu &root, const char*  pre , const char* in,int len)
    {
    int k;//左子树长度
    const char* temp;
    if(len<=0)
    {
    root=NULL;
    return;
    }
    root=(linkshu)malloc(sizeof(struct shu));
    root->data=*pre;
    for(temp=in;temp<in+len;temp++)
    {
    if(*temp==*pre)
    break;
    }


    k=temp-in;
    createBiTree(root->lchild,pre+1,in,k);
    createBiTree(root->rchild,pre+1+k,temp+1,len-1-k);



    }

     

  • 相关阅读:
    RS485通信和Modbus协议(转)
    Modbus通讯错误检测方法
    Modbus消息帧
    Modbus通讯两种传输方式
    echarts自定义图例legend文字和样式
    host文件的作用
    webpack --watch和supervisor的不同
    vue中如何使用echarts
    Vue父子组件生命周期
    Git总结笔记
  • 原文地址:https://www.cnblogs.com/wonderKK/p/2240355.html
Copyright © 2020-2023  润新知