zoukankan      html  css  js  c++  java
  • 数据结构-二叉树-(先序|后序)+中序求(后序|先序)笔记

    //已知先序中序
    #include <iostream>
    #include <string>
    using namespace std;
    struct Node{
        char data;
        Node *left;
        Node *right;
    };
    Node *search(char *pre,char *in,int length)
    {
        if (length==0)
            return NULL;
        else {
            Node *node=new Node;
            node->data=*pre;    //根结点
            int index;
            for(index=0;index<length;index++)
            {
                if(in[index]==*pre) break;    //在中序中定位根结点
            }
            node->left=search(in,pre+1,index);
            //在先序中左子树的根节点是pre的下一个即为pre+1
            //把中序中根结点左侧的部分当作左子树的先序遍历
            //index计数出左树的length
            node->right=search(in+index+1,pre+index+1,length-(index+1));
            
            //右树的length为总length减去(index+1根结点)
            cout<<node->data<<endl;
            return node;
        }}
        
    int main()
    {
        char *pre="EBADCFHGIKJ";
        char *in="ABCDEFGHIJ";
        search(pre,in,10);
        return 0;
    }

    以上程序是可行的

    已已知先序和中序为例,先通过先序求得根结点,再在中序中定位根结点,得知左右子树,进而能够在先序中分开左右子树。

    后序加中序同理。

    核心步骤我认为是找到根结点后定位的这一步,是把整棵树化解开来的基础。

  • 相关阅读:
    thrift python安装
    第二周习题F
    Equivalent Strings
    生成可重集的排列(方法)
    分数拆分(刘汝佳紫书P183)
    Prime ring problem
    Maximun product
    Division
    每周一赛(E题,广搜求方案)
    ICE CAVE(BFS搜索(模拟))
  • 原文地址:https://www.cnblogs.com/loglian/p/12909984.html
Copyright © 2011-2022 走看看