常考数据结构与算法:重建二叉树
输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7,2,1,5,3,8,6},则重建二叉树并返回。
示例1
输入
[1,2,3,4,5,6,7],[3,2,4,1,6,5,7]
返回值
{1,2,5,3,4,6,7}
class TestTreeNode2 {static TreeNode findBinaryTree(int[] pre, int preStart, int preEnd, int[] in ,int inStart, int inEnd){if(preStart > preEnd || inStart > inEnd)return null;TreeNode root = new TreeNode(pre[preStart]);for(int i = inStart; i<=inEnd; i++){if(in[i] == pre[preStart]){// 左子树的长度为i-inStartroot.left = findBinaryTree(pre, preStart+1,preStart+i-inStart, in, inStart,i-1);root.right = findBinaryTree(pre, preStart+i-inStart+1,preEnd, in, i+1,inEnd);}}return root;}// 重建主函数public static TreeNode reConstructBinaryTree(int [] pre,int [] in) {TreeNode root = findBinaryTree(pre, 0, pre.length-1, in, 0, in.length-1);return root;}public static void main(String[] args) {int[] pre = new int[]{1,2,4,3,5,6}; // 前序序列 前序序列的第一个为根节点int[] in = new int[]{4,2,1,5,3,6}; // 中序序列 根节点的左边为左子树,右边为右子数TreeNode root = reConstructBinaryTree(pre,in);showPreTree(root);}static void showPreTree(TreeNode node){if(null == node){return ;}System.out.println(node.val);if(null != node.left){showPreTree(node.left);}if(null != node.right){showPreTree(node.right);}}
}
常考数据结构与算法:重建二叉树相关推荐
- 常考数据结构与算法:输出二叉树的右视图
题目描述 请根据二叉树的前序遍历,中序遍历恢复二叉树,并打印出二叉树的右视图 上图树的右视图为:{1,4,3,7} 做此题之前可以先做下面3道题: 1. 常考数据结构与算法:求二叉树的层序遍历 2.常 ...
- 常考数据结构与算法:求二叉树的层序遍历
题目描述 给定一个二叉树,返回该二叉树层序遍历的结果,(从左到右,一层一层地遍历) 例如: 给定的二叉树是{3,9,20,#,#,15,7}, 该二叉树层序遍历的结果是 [ [3], [9,20], ...
- 常考数据结构与算法:在二叉树中找到两个节点的最近公共祖先
题目描述 给定一棵二叉树以及这棵树上的两个节点 o1 和 o2,请找到 o1 和 o2 的最近公共祖先节点. 假设节点的值都大于0. 比如9,10的最近公共祖先节点是2. 思路: 从根节点开始遍历 ...
- 常考数据结构与算法:实现二叉树先序,中序和后序遍历
题目描述 分别按照二叉树先序,中序和后序打印所有的节点. 输入 {1,2,3} 返回值 [[1,2,3],[2,1,3],[2,3,1]] import java.util.ArrayList;cla ...
- 常考数据结构与算法:判断二叉树是否对称(迭代法,递归法)
给定一棵二叉树,判断琪是否是自身的镜像(即:是否对称) 例如:下面这棵二叉树是对称的 1 / \ 2 2 / \ / \ 3 4 4 3 下面这棵二叉树不对称 ...
- 数据结构与算法--重建二叉树
二叉树 树在实际编程中经常遇到地一种数据结构.上一篇中我们解释了二叉树及其原理,从中可以知道,树地操作会涉及到很多指针地操作,我们一般遇到地树相关地问题差不多都是二叉树.二叉树最重要地莫过于遍历,即按 ...
- 常考数据结构与算法:二叉树的最大深度
题目描述 求给定二叉树的最大深度, 最大深度是指树的根结点到最远叶子结点的最长路径上结点的数量. class TreeNode {int val;TreeNode left;TreeNode righ ...
- 常考数据结构与算法:二叉树的镜像
题目描述 操作给定的二叉树,将其变换为源二叉树的镜像. 输入描述: 二叉树的镜像定义:源二叉树 8 / \. 6 10 / \ / \. 5 7 9 11 镜像二叉树 8 / \. 10 6 / \ ...
- 常考数据结构与算法:二叉树的之字形层序遍历
题目描述 给定一个二叉树,返回该二叉树的之字形层序遍历,(第一层从左向右,下一层从右向左,一直这样交替) 例如: 给定的二叉树是{3,9,20,#,#,15,7}, 该二叉树之字形层序遍历的结果是 [ ...
最新文章
- nstruts2.0发布前奏---浅谈struts和依赖注入在项目中的应用
- 编程开发使用的软件大全
- 【机器学习】sklearn数据集获取、分割、分类和回归
- mongodb书籍_我为什么放弃MySQL,选择了MongoDB?看到这个数据你就会明白了
- POJ 2912 Rochambeau(难,好题,枚举+带权并查集)
- python常用代码大全-Python常用库大全及简要说明
- python矩阵运算与线形代数_Python 执行矩阵与线性代数运算
- Verilog设计中的锁存器
- unity使用html播放器,Unity Web Player and browser communication Unity网络播放器和浏览器通信...
- 数据结构(C语言)-串
- 离散数学集合论与数理逻辑基本概念
- 农业统计分析系列2-试验设计
- Android 短视频 SDK 转场特效的音视频同步分析
- 隐藏IP的功能和原理
- sap采购申请自动转采购订单_我的SAP运维日常_0021_MM_计划订单转采购申请时绑定凭证类型...
- 不用写一行代码,就能用ivx制作一个“微信小程序“,超牛逼
- 用C++语言写游戏——打怪小游戏
- 全球与中国新一代高级电池市场深度研究分析报告
- 大数据就业的三大方向和十种岗位
- linux gcc 缺少 libmpfr.so,rpm方式安装gcc缺少依赖项的解决方法
热门文章
- tree树的展示,check树的展示,json数据转zree树格式数据
- 反射(操作MetaData)
- BZOJ3261 最大异或和 解题报告(可持久化Trie树)
- 部署harbor1.2.0开启ldap验证
- Python学习day5作业
- 将功补过 树形动态规划
- sqlserver中将行数据转为Xml文件格式
- 从无头单链表中删除节点 结构之法 4
- 一、如何创建一个状态栏扩展(火狐插件扩展开发教程)
- Django-Migration admin.0001_initial is applied before its dependency accounts.0001_initial on....