数据结构学习笔记(9)---已知二叉树的遍历序列,恢复二叉树
来源:互联网 发布:怎样在电脑上开淘宝店 编辑:程序博客网 时间:2024/05/16 11:07
思路:首先我们要了解如何使用二叉树中序序列和先序序列来手动恢复二叉树
- (1)根据先序序列的第一个节点可得到根节点
- (2)根据根节点在中序序列中的位置可以将中序序列划分为左右子树
- (3)根据先序的第二个节点可以将子树划分为左右子树,依次循环下去
- (4)直到当子树的长度为零时结束
//给先序和中序创建二叉树char *PreArray = "abdfgceh"; //先序序列char InArray[] = "bfdgaceh";//中序序列void PreInCreateTree(BiTree &root,int PreIndex,int InIndex,int subTreeLen){ if(subTreeLen <= 0) { root = NULL; return; } else { root = (BiTree)malloc(sizeof(BiTNode)); //创建先序对应的根节点 root->data = PreArray[PreIndex]; //找到该节点在中序序列中的位置,并将中序序列划分为左右两个子树 //strchr(InArray,PreArray[PreIndex])返回的是该节点在中序序列中的地址 int index = strchr(InArray,PreArray[PreIndex]) - InArray; //左子树的长度 int LenL = index - InIndex; //创建左子树 PreInCreateTree(root->LChild,PreIndex+1,InIndex,LenL); //右子树的长度 = 总长度 - 左子树长度 - 一个根节点 int LenR = subTreeLen - LenL - 1; //创建右子树,先序的字符位置从左子树和根节点后面开始,中序的位置从当前根节点后面的一个位置开始 PreInCreateTree(root->RChild,PreIndex+LenL+1,index+1,LenR); }}
(2)根据后序与中序恢复二叉树 思路为:
- (1)根据后序序列的倒数第一个节点可得到根节点
- (2)根据根节点在中序序列中的位置可以将中序序列划分为左右子树
- (3)根据后序的倒数第二个节点可以将子树划分为左右子树,依次循环下去
- (4)直到当子树的长度为零时结束
char *PostArray = "fgdbheca"; //后序序列char InArray[] = "bfdgaceh";//中序序列void PostInCreateTree(PBiTree &root, int PostIndex, int InIndex, int subTreeLen){ if (subTreeLen <= 0) { root = NULL; return; } else { root = new BiTree; root->date = PostArray[PostIndex]; int index = strchr(InArray, PostArray[PostIndex]) - InArray; int LenL = index - InIndex; int LenR = subTreeLen - LenL - 1; PostInCreateTree(root->rchild, PostIndex - 1, index + 1, LenR); PostInCreateTree(root->lchild, PostIndex - LenR -1, InIndex, LenL); }}
阅读全文
0 0
- 数据结构学习笔记(9)---已知二叉树的遍历序列,恢复二叉树
- 学习笔记——已知二叉树的先序中序求后序、中序后序求先序的遍历序列
- 遍历序列恢复二叉树
- 遍历序列恢复二叉树
- 二叉树面试题--已知二叉树的两种遍历序列,求出另一种遍历序列
- 二叉树面试题--已知二叉树的两种遍历序列,求出另一种遍历序列
- 二叉树 已知两种遍历恢复二叉树
- 由已知的层次遍历序列构建二叉树
- 已知二叉树的两种遍历序列重建树
- 数据结构学习笔记(8)---二叉树的层次遍历
- 由二叉树的遍历序列恢复二叉树
- 数据结构与算法学习之二叉树的遍历:已知先序、中序、后序序列三者中的两种求另外一种遍历的算法
- 【郝斌数据结构自学笔记】70-74_已知两种遍历序列求原始二叉树概述_已知先序和中序求后序_已知中序和后序求先序_树的应用简单介绍
- 【学习点滴-数据结构-二叉树】序列是否是二叉查找树的后序遍历结果
- 数据结构学习笔记-二叉树的层序遍历
- 数据结构学习笔记——二叉树的遍历
- 二叉树(三)——已知遍历序列构造二叉树(java版)
- 已知前序和中序遍历恢复二叉树
- [SCOI2005]最大子矩阵
- SSD: Single Shot MultiBox Detector
- 客户端配置文件优化策略
- CSDN全屏编辑文章
- 获取在线帮助
- 数据结构学习笔记(9)---已知二叉树的遍历序列,恢复二叉树
- Yii2中hasMany用法示例
- java连接虚拟机中的redis服务
- 单链表反转
- ionic在Ios和Android上样式不兼容问题~
- webstorm 2017开发less、stylus报错
- 51nod 只包含因子2 3 5的数 dfs打表+二分
- Mycat源码分析
- 本地配置Java项目映射为外网访问【https协议版本】