重建二叉树
来源:互联网 发布:db2和oracle的sql区别 编辑:程序博客网 时间:2024/06/02 04:57
题目描述
- 输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7,2,1,5,3,8,6},则重建二叉树并返回。
Java Code
public class RebuildTree { public static void main(String[] args) { int[] pre = {1,2,4,7,3,5,6,8}; int[] in = {4,7,2,1,5,3,8,6}; TreeNode root = SolutionOne.reConstructBinaryTree(pre,in); SolutionOne.Traverse(root); System.out.println(); }}class SolutionOne{ public static TreeNode reConstructBinaryTree(int [] pre,int [] in) { return reBuildBinaryTree(pre,in,0,pre.length-1,0,in.length-1); } public static TreeNode reBuildBinaryTree(int[] pre,int [] in,int preLeft,int preRight,int inLeft,int inRight) { if(preLeft > preRight || inLeft > inRight) return null; TreeNode root = new TreeNode(pre[preLeft]); for(int pos = inLeft; pos<= inRight; pos++) { if(in[pos] == root.val){ root.left = reBuildBinaryTree(pre,in,preLeft+1,preLeft+pos-inLeft,inLeft,pos-1); root.right = reBuildBinaryTree(pre,in,preLeft+pos+1-inLeft,preRight,pos+1,inRight); } } return root;} public static void Traverse(TreeNode root) { if(root == null) return; Traverse(root.left); System.out.print(root.val + " "); Traverse(root.right); }}class TreeNode { int val; TreeNode left; TreeNode right; TreeNode(int x){ val = x; }}
- 注意要注意代码中pos表示的含义,之前一直没有成功是因为将preLeft+pos-inLeft写成了preLeft+pos,并没有减去inLeft
0 0
- 3.9重建二叉树
- 重建二叉树
- 二叉树重建
- 二叉树重建
- 二叉树的重建
- 重建二叉树
- 重建二叉树
- 重建二叉树
- 重建二叉树
- 重建二叉树
- 重建二叉树
- 重建二叉树
- 重建二叉树
- 二叉树重建
- 二叉树重建
- 重建二叉树
- 重建二叉树
- 重建二叉树
- 严重: Exception starting filter struts
- 中储贷用诚信感召,远离“加多宝装逼广告”
- 数据分析入门必看:3个选择方向及技能要求!
- AFN使用HTTPS
- EigheQueens
- 重建二叉树
- spring boot 直接返回HTML
- JBOSS START/STOP/RESTART shell script
- iOS企业开发plist安装包实现
- 适合于图像处理方向的SCI期刊杂志列表
- 使用 mysqldump 迁移 MySQL 数据
- xml操作(二)添加xml节点的子节点
- [Android 知识点] 自定义View(三)
- Myeclipse添加并使用JUnit