已知二叉树的前序遍历、中序遍历或者中序遍历、后序遍历求二叉树结构的算法
二叉树中的前序遍历是先访问根结点,再访问左子树,右子树。
中序遍历是先访问左子树,再是根结点,最后是右子树。
后序遍历是先访问左子树,再是右子树,最后是根结点。
算法思路是先根据前序遍历的第一个结点或者后序遍历的最后一个结点,查找对应在中序遍历中的位置,就可以确定左子树包含的元素和右子树包含的元素,最后通过递归来实现就可以了。
二叉树的表示形式为
//二叉树的结构表示为
class TreeNode
{int val;TreeNode left;TreeNode right;TreeNode(int x) {val = x;}
}
已知前序遍历,中序遍历求二叉树结构,代码如下:
class Solution
{private TreeNode __buildTree(int[] preorder, int start1, int[] inorder, int start2, int len){if (0 == len) return null;TreeNode root = new TreeNode(preorder[start1]);//在中序遍历中找到根结点,确定左子树和右子树int index = start2;for (int i = start2; i < start2 + len; i++){if (inorder[i] == preorder[start1]){index = i;break;}}int len1 = index - start2;root.left = __buildTree(preorder, start1 + 1, inorder, start2, len1);root.right = __buildTree(preorder, start1 + 1 + len1, inorder, index + 1, len - 1 - len1);return root;}public TreeNode buildTree(int[] preorder, int[] inorder){return __buildTree(preorder, 0, inorder, 0, preorder.length);}
}
已知中序遍历,后序遍历,求二叉树结构代码如下:
class Solution
{private TreeNode __buildTree(int[] inorder, int start1, int[] postorder, int start2, int len){if (0 == len) return null;int val = postorder[start2 + len - 1];TreeNode root = new TreeNode(val);//在中序遍历中找到根结点,确定左子树和右子树int index = start1;for (int i = start1; i < start1 + len; i++){if (inorder[i] == val){index = i;break;}}int len1 = index - start1;root.left = __buildTree(inorder, start1, postorder, start2, len1);root.right = __buildTree(inorder, start1 + 1 + len1, postorder, start2 + len1, len - 1 - len1);return root;}public TreeNode buildTree(int[] inorder, int[] postorder){return __buildTree(inorder, 0, postorder, 0, postorder.length);}
}
已知二叉树的前序遍历、中序遍历或者中序遍历、后序遍历求二叉树结构的算法相关推荐
- 已知一棵完全二叉树存于顺序表sa中,sa.elem[1..sa.length]含结点值,试编写算法由此顺序存储结构建立该二叉树的二叉链表。
已知一棵完全二叉树存于顺序表sa中,sa.elem[1-sa.length]含结点值,试编写算法由此顺序存储结构建立该二叉树的二叉链表. 分析:由二叉树的性质可知,一个下标为i的节点若有左子树,则其左 ...
- Java基础练习题 已知长方体的长、宽、高分别是a、b、c,求其表面积和体积。
目录 1.代码思路 2.代码实现过程 2.1.获取用户输入 2.2.计算结果并输出 3.完整代码 1.代码思路 先通过用户键盘输入获取三个数,分别为长.宽.高,然后通过长方体表面积和体积计算公式进行计 ...
- 已知思科ASA设备漏洞仍在其新版本中存在
近日,名为"Shadow Brokers(影子经纪人)"的黑客组织声称成功入侵了跟NSA相关的Equation Group(方程式组织)的计算机系统,并成功窃取到了大量的机密信息以 ...
- 后序遍历c语言程序,C++对树进行后序遍历的代码
下面是编程之家 jb51.cc 通过网络收集整理的代码片段. 编程之家小编现在分享给大家,也给大家做个参考. #include #include struct Node{ Node *lchild;/ ...
- 已知 int j, i=1;,执行语句 j=-i++;后,j 的值是
已知 int j, i=1;,执行语句 j=-i++;后,j 的值是 负号运算符第二高级,所以先赋值j,之后再进行++
- 已知由一个线性链表表示的线性表中含有 3 类字符的数据元素(如:字母,数字和其他字符),试编写算法将该线性链表分割为 3 个循环链表,其中每个循环链表均只含有一类字符。
先封装一个单链表LA,引用Creat()函数利用尾插法来生成链表,先输入n值来确定单链表中数据元素的个数,然后通过键盘输入元素,创建3个空链表来存放三种不同字符类型,通过Match()中的ASCII码 ...
- 二叉树已知前序遍历、中序遍历画出二叉树的形状
前序遍历: 前序遍历(VLR)是二叉树遍历的一种,也叫做先根遍历.先序遍历.前序周游,可记做根左右.前序遍历首先访问根结点然后遍历左子树,最后遍历右子树. 若二叉树为空则结束返回,否则: (1)访问根 ...
- 已知二叉树后序遍历序列是DABEC 中序遍历列是 DEBAC ,它的前序遍历序列是
已知二叉树后序遍历序列是DABEC 中序遍历列是 DEBAC ,它的前序遍历序列是: ----C ---/ --E -/-\ D---B -----\ ------A 我知道答案思念是这个....我想 ...
- 二叉树的前序、中序、后序遍历及互相求法
主要内容转自http://blog.csdn.net/fansongy,例子转自https://www.zybang.com/question/eacbb6b83a26339e9af3287a7266 ...
- [湖南大学程序设计实训训练作业一]9.二叉树遍历,从前序、中序到后序(二叉树呀,面试必考哦!)
9.二叉树遍历,从前序.中序到后序 [写在前面]---补充知识 [问题描述] [输入形式] [输出形式] [样例输入] [样例输出] 题解 思路 代码 [写在前面]-补充知识 之前写过剑指offer, ...
最新文章
- 马斯克嘲笑「元宇宙」的想法,并给年轻人5条鸡汤
- underscore.js源码解析2
- 聚类分析1:层次聚类
- QueryWrapper查询
- Android编译默认英语,Android 编译系统 (一)
- linux添加了一条静态路由,为Linux新增静态路由的方法
- duilib list控件扩展
- 宝塔mysql表使用中_Mysql-表的基本操作
- OC可变数组的常用操作
- 工作两年和研究生两年(专业硕士)有什么差异?
- 剑指offer之编程是一种习惯
- 批量更改PPT文件中的内容(修改大量PPT)
- corutine rust_rust 异步 IO:从 mio 到 coroutine
- Python判断语句中 and 和 or 的用法
- matlab日常(2)
- 服务器主板用linux版本系统,华硕WG X299主板的服务器上安装ubuntu16.04的系统
- halcon学习拓展系列—《halcon精髓之坐标系仿射篇》
- 【自学Java】Java数据类型
- ThingsBoard MQTT链接、掉线报警、数据转换规则引擎
- 为什么单螺旋桨飞机会左偏?
热门文章
- ActiveMQ 入门
- hrbust 1616 密码锁(广搜)
- 学python需要安装什么软件-学武汉Python培训课程需要安装什么软件?分享这10款...
- python下载网页里面所有的图片-python批量下载图片的三种方法
- 为什么我的电脑上安装不上python-python安装不上
- python绘制3d图-Python绘制3D图形
- python学习路线-Python学习路线图(2020年最新版)
- python基础代码库-CNN详解-基于python基础库实现的简单CNN
- python3读取excel数据-python3读取Excel数据
- python视频教学视频哪个好-python视频教程哪家好