关闭

[置顶] 根据先序序列与中序序列构建二叉树

标签: 二叉树
440人阅读 评论(0) 收藏 举报
分类:

算法如下:
1)先在先序序列中找到根结点,
2)在中序序列中找到根结点位置,(可以将二叉树分为左子树和右子树)
3)用同样的办法构造左子树
4)用同样的办法构造右子树。

//根据先序序列与中序序列构建二叉树
BinaryTree* Pre_In_Build(char* pre ,char* in, int size){
    if(!pre || !in || size < 0){
        cout<<"输入出错!"<<endl;
        return NULL;
    }
    int root_index = 0;
    //寻找根结点 
    for(root_index = 0 ; root_index < size ; root_index++){
        if(in[root_index] == pre[0]){
            break;
        }else{
            continue;
        }
    }
    if(root_index == size){
        cout<<"先序序列与中序序列不匹配!"<<endl;
        return NULL;
    }
    //创建根结点 
    BinaryTree* root = this->Creat_Node(pre[0]);
    //递归构建左子树 
    if(root_index > 0){
        root->lchild = this->Pre_In_Build(pre+1,in,root_index); 
    }
    //递归构建右子树 
    if(size - root_index - 1 > 0){
        root->rchild = this->Pre_In_Build(pre+root_index+1,in+1+root_index,size-root_index-1);
    }
    return root;
}

void set(char ch){
    this->data = ch;
    this->lchild = this->rchild = NULL;
}

//创建根节点的函数 
BinaryTree* Creat_Node(char ch){
    BinaryTree* root;
    root = new BinaryTree;
    root->set(ch);
    return root;
}

对于二叉树的遍历算法可以详见我的另一篇博客:
http://blog.csdn.net/qq_30091945/article/details/77531651

1
0
查看评论

根据先序序列和中序序列创建二叉树

思考:如何才能确定一棵树? 结论:    通过中序遍历和先序遍历可以确定一个树                 通过中序遍历和后续遍历可以确定一个树 ...
  • bbs375
  • bbs375
  • 2016-10-06 19:12
  • 7809

根据二叉树的先序和中序来构建二叉树

根据二叉树的先序和中序 来构建二叉树然后再输出二叉树的后序这是笔试题中常见的题目。 其实思想很简单 string pre 为先序的字符串 string in为中序的字符串 pre[0]为树根 找到pre[0]在in中的位置(下标从0开始)为index,则 index为左子树的长度 pre中...
  • HE19930303
  • HE19930303
  • 2015-11-21 10:54
  • 2245

根据前序和中序序列,建立二叉树(java实现)

根据前序序列:int[] preSort={1,2,4,7,3,5,6,8}; 中序序列:int[] inSort=new int[]{4,7,2,1,5,3,8,6}; 建立二叉树,求后序遍历等问题。 前序遍历,中序遍历,后序遍历,层次遍历,四种遍历中,必须包含中序遍历+三选一,两个序列就可以恢复...
  • A784586
  • A784586
  • 2017-01-09 18:13
  • 654

根据前序和中序序列确定二叉树

方法1、确定树的根节点。树根是当前树中所有元素在前序遍历中最先出现的元素。 2、求解树的子树。找出根节点在中序遍历中的位置,根左边的所有元素就是左子树,根右边的所有元素就是右子树。若根节点左边或右边为空,则该方向子树为空;若根节点左边和右边都为空,则根节点已经为叶子节点。 3、递归求解树。将左子...
  • luoluozlb
  • luoluozlb
  • 2016-08-08 21:04
  • 3147

由先序+后序遍历确定序列是否唯一并输出一个中序序列

由先序+后序遍历确定序列是否唯一并输出一个中序序列@(算法学习)在前面讨论过如何确定两种唯一二叉树的情况。 先序+中序 后序+中序 中序是必须要有的,因此按照这个提示原则,我们根据根在先序或后序的位置特殊性,在中序序列中找到根的位置,迅速完成了对树的切割。反向构造时,问题也很简洁,首先确认的是根结点...
  • u011240016
  • u011240016
  • 2016-11-17 01:09
  • 882

根据先中序序列或后中序序列确定二叉树

根据后中序序列生成二叉树:从后序序列中找到二叉树(或者子树)的根结点,然后在中序序列找到该根结点,根结点将中序序列分成左右两部分,左边为左子树,右边为右子树。根据中序序列确定左子树的长度,确定左子树中最右下根结点在后序序列中的位置,从而可以确定左右子树在后中序序列中的范围,然后递归的生成左右子树。
  • QiaoRuoZhuo
  • QiaoRuoZhuo
  • 2014-10-03 11:36
  • 1853

根据二叉树的先序和中序序列画出二叉树的方法

已知二叉树的先序和中序序列如下: 先序序列:1 2 4 6 3 5 7 8 中序序列:2 6 4 1 7 5 8 3 请画出该二叉树。 答: 先序序列的遍历顺序是先根节点,后左孩子,最后右孩子 中序序列的遍历顺序是先左孩子,后根节点,最后右孩子 根据先序序列知道,1肯定是根节点,然后看...
  • u010189308
  • u010189308
  • 2016-04-13 15:38
  • 1403

根据二叉树的前序序列和中序序列得到后序序列

一个例子: 前序序列:abdgcefh 中序序列:dgbaechf 求:后序序列 分析: 根据前序序列可知,a肯定是根节点。再在中序序列中找到a,发现a左侧是dgb,右侧是echf,则dgb应该是a的左孩子,echf是a的右孩子。 接着只要递归的判断左右孩子的后序序列就可以了。比如dgb...
  • zhimajiejie
  • zhimajiejie
  • 2012-10-10 15:42
  • 3673

从前序+中序或者后序+中序序列中恢复二叉树过程

给出前序遍历和中序遍历,如何绘制出二叉树: 如果给出遍历产生的一串字符,不容易确定各个字符在树中的具体位置,因而需要两个遍历串相结合才能画出一棵二叉树。 如,给出前序遍历ADFGHKLPQRWZ,中序遍历GFHKDLAWRQPZ。 其具体寻找过程如下: 其中矩形内表示当前节点的左右子树的元素...
  • dalong277
  • dalong277
  • 2016-04-26 11:18
  • 1661

树的学习——(递归构建二叉树、递归非递归前序中序后序遍历二叉树、根据前序序列、中序序列构建二叉树)

前言 最近两个星期一直都在断断续续的学习二叉树的数据结构,昨晚突然有点融汇贯通的感觉,这里记录一下吧 题目要求 给定前序序列,abc##de#g##f###,构建二叉树,并且用递归和非递归两种方法去做前序,中序和后序遍历 二叉树的数据结构 /** * 定义二叉树的数据结构 */ stru...
  • zinss26914
  • zinss26914
  • 2012-12-29 10:46
  • 7667
    个人资料
    • 访问:155748次
    • 积分:4932
    • 等级:
    • 排名:第6843名
    • 原创:329篇
    • 转载:0篇
    • 译文:0篇
    • 评论:81条
    博客专栏
    最新评论