首页 > 其他 > 详细

数据结构-二叉树-(先序|后序)+中序求(后序|先序)笔记

时间:2020-05-18 14:31:26      阅读:42      评论:0      收藏:0      [点我收藏+]
//已知先序中序
#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;
}

以上程序是可行的

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

后序加中序同理。

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

数据结构-二叉树-(先序|后序)+中序求(后序|先序)笔记

原文:https://www.cnblogs.com/loglian/p/12909984.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!