根据遍历结果构造二叉树
来源:互联网 发布:上海大学乐乎论坛 编辑:程序博客网 时间:2024/05/29 13:02
二叉树的前序,中序,后序遍历不是本篇说的重点,这次主要说一下如何根据两种遍历结果构造一棵树。
1.根据前序和中序遍历的结果构造这棵树
char *ps = "ABCDEFGH"; //前序
char *is = "CBEDFAGH"; //中序
由前序遍历的规则可知,ps的第一个元素即为树的根,我们以第一个为界限在中序遍历的结果里面找,即可将第二个数组划分为两部分,左边为这棵树的左子树,右边为这棵树的右子树。后面的过程同上。下面是代码实现。
BtNode * CreateTreePI(ElemType *ps,ElemType *is,int n)
{
BtNode *s = NULL;
if(n > 0)
{
s = _Buynode();
s->data = ps[0];
int pos = findis(is,ps[0],n); //寻找树根的位置
if(pos == -1) exit(1);
s->leftchild = CreateTreePI(ps+1,is,pos); //注意边界
s->rightchild = CreateTreePI(ps+pos+1,is+pos+1,n-pos-1);
}
return s;
}
//寻找树根在中序遍历的位置函数
int findis(ElemType *is,ElemType x,int n)
{
for(int i = 0;i<n;++i)
{
if(is[i] == x)
return i;
}
return -1;
}
2.根据中序和后序的结果构造这棵树
后序遍历的最后一个元素为树的根,以最后一个元素为界限将中序遍历的结果划分为两部分,左边的为左子树,右边的为右子树。以下是代码实现:
BtNode * CreateTreeIL(ElemType *is,ElemType *ls,int n)
{
BtNode *s = NULL;
If(n>0)
{
S = _BuyNode();
S->data = ls[n-1];
Int pos = findIs(is,ls[n-1],n);
If(pos==-1)exit(-1);
S->leftchild = CreateTreeIL(is,ls,pos);
S->rightchild = CreateTreeIL(is+pos+1,ls+pos,n-pos-1);
}
return s;
}
- 根据遍历结果构造二叉树
- 根据遍历结果,构造二叉树
- 根据前序遍历和中序遍历结果构造二叉树
- 根据前序遍历和中序遍历结果构造二叉树
- 二叉树--根据遍历构造二叉树
- 根据二叉树遍历结果反推树
- 根据前序和中序遍历结果构造二叉树
- 根据前序和中序遍历结果构造二叉树
- 根据二叉树的遍历结果重建二叉树
- 根据二叉树遍历的结果重构二叉树
- 编程之美--根据遍历结果重建二叉树
- 根据两种不同遍历结果重构二叉树
- 【数据结构与算法】根据遍历结果构建二叉树
- 根据前序和中序遍历构造二叉树
- 根据前序和中序遍历构造二叉树
- 根据中序和层次遍历序列,构造二叉树
- 二叉树问题-根据前序遍历结果和中序遍历结果得出后序遍历结果
- 根据二叉树的前序遍历和中序遍历的结果,重建二叉树
- 中文分词之HMM模型详解
- ssm maven配置
- 论__大量文本内容去重的方式
- 快速排序---C语言实现
- C语言可变参函数的实现原理浅析
- 根据遍历结果构造二叉树
- Cocos2d-x常用动作 Action API
- 简单方法实现重力感应背景图(GravityImageView)
- js事件
- C语言实现循环队列
- linux开机自启动的几种方法
- 程序员技术练级攻略
- JavaScript中的prototype.bind()方法介绍
- 关于对象实例的一些新手问题