Java实现根据二叉树的前序遍历和中序遍历序列重建二叉树(递归实现)
2019-04-24 12:40
162 查看
版权声明:本文为博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/H__Zhou/article/details/89490408
题目描述
题目来源:牛客-剑指offer 题目描述输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7,2,1,5,3,8,6},则重建二叉树并返回。
分析根据前序遍历和中序遍历的特点,前序遍历的第一个元素即根节点,在中序序列中该节点的左边为左子树,右边为右子树。
Java实现
public TreeNode reConstructBinaryTree(int[] pre, int[] in) { return reConstructBinaryTree(pre, 0, pre.length - 1 , in, 0, in.length - 1 ); } private static TreeNode reConstructBinaryTree(int[] pre , int preLow, int preHigh, int[] in, int inLow,int inHigh){ if(preLow > preHigh || inLow > inHigh) return null; TreeNode treeNode = new TreeNode(pre[preLow]); //根节点为pre的第一个元素 for (int i = 0; i < in.length; i++) { //找到pre[lowHigh]在in序列中的索引(即根节点在in序列中位置,根节点左边为左子树节点,右边为右子树节点) if( pre[preLow] == in[i] ){//startPre+i-startIn i-startIn+startPre+1 treeNode.left = reConstructBinaryTree(pre, preLow + 1 , preLow + i - inLow, in, inLow , i - 1); treeNode.right = reConstructBinaryTree(pre, i - inLow + preLow + 1, preHigh, in, i + 1, inHigh); break; } } return treeNode; }
相关文章推荐
- 根据前序遍历和中序遍历重建二叉树的Java实现
- 通过前序遍历和中序遍历重建二叉树以及输出后序遍历(Java实现)
- 一直二叉树的前序遍历和中序遍历的结果,重建该二叉树 Java代码实现
- 通过前序遍历和中序遍历重建二叉树以及输出后序遍历(Java实现)(二)
- 根据前序遍历序列和中序遍历序列重建二叉树
- 根据先序和中序遍历重建二叉树java实现
- 剑指Offer_06 根据前序遍历和中序遍历序列 重建二叉树
- 根据前序遍历序列和中序遍历序列重建二叉树
- 根据前序遍历和中序遍历重建二叉树
- 树的学习——(递归构建二叉树、递归非递归前序中序后序遍历二叉树、根据前序序列、中序序列构建二叉树)
- Java实现二叉树的前序、中序、后序、层序遍历(非递归方法)
- 第十二题:使用递归完成二叉树的前序,中序,后续遍历(Java实现)
- C++ 根据前序遍历序列和中序遍历序列可以构造唯一的二叉树
- 剑指offer刷题之c++实现的根据二叉树的前序和中序遍历重建二叉树
- 面试题二: java 实现二叉树的中序优先遍历,不能用递归
- java语言实现二叉树的前序、中序与后序遍历(递归与非递归) 层次遍历
- java实现根据前序遍历构建二叉树(前序遍历、中序遍历、后序遍历)
- 用java实现二叉树的前序、中序、后序、层次遍历(递归和非递归版)
- JAVA下实现二叉树的先序、中序、后序、层序遍历(递归和循环)
- 根据前序遍历和中序遍历重建二叉树