LintCode 72. 中序遍历和后序遍历树构造二叉树

原创 2018年04月17日 09:04:03

根据中序遍历和后序遍历树构造二叉树

/**
 * Definition of TreeNode:
 * public class TreeNode {
 *     public int val;
 *     public TreeNode left, right;
 *     public TreeNode(int val) {
 *         this.val = val;
 *         this.left = this.right = null;
 *     }
 * }
 */

public class Solution {
   /**
    * @param inorder: A list of integers that inorder traversal of a tree
    * @param postorder: A list of integers that postorder traversal of a tree
    * @return: Root of a tree
    */
   public TreeNode buildTree(int[] inorder, int[] postorder) {
      // write your code here
      TreeNode root = null;
      int[] inorderLeft, inorderRight, postorderLeft, postOrderRight;
      int rootIndex = 0;
      if (inorder != null && inorder.length > 0 && postorder != null && postorder.length > 0) {
         root = new TreeNode(postorder[postorder.length - 1]);
         for (int i = 0; i < inorder.length; i++) {
            if (root.val == inorder[i]) {
               break;
            }
            rootIndex++;
         }

         inorderLeft = new int[rootIndex];
         postorderLeft = new int[rootIndex];
         for (int i = 0; i < rootIndex; i++) {
            inorderLeft[i] = inorder[i];
            postorderLeft[i] = postorder[i];
         }

         inorderRight = new int[inorder.length - rootIndex - 1];
         postOrderRight = new int[postorder.length - rootIndex - 1];
         for (int i = rootIndex + 1; i < postorder.length; i++) {
            inorderRight[i - rootIndex - 1] = inorder[i];
            postOrderRight[i - rootIndex - 1] = postorder[i - 1];
         }

         root.left = buildTree(inorderLeft, postorderLeft);
         root.right = buildTree(inorderRight, postOrderRight);
      }
      return root;
   }
}

LintCode(72)中序遍历和后序遍历树构造二叉树

题目  中序遍历和后序遍历树构造二叉树 根据中序遍历和后序遍历树构造二叉树 样例 给出树的中序遍历: [1,2,3] 和后序遍历: [1,3...
  • fly_yr
  • fly_yr
  • 2016-06-15 20:46:43
  • 1758

[LintCode] 中序遍历和后序遍历树构造二叉树 Construct Binary Tree from Inorder and Postorder Traversal

根据中序遍历和后序遍历树构造二叉树 注意事项 你可以假设树中不存在相同数值的节点 样例 给出树的中序遍历: [1,2,3] 和后序遍历: [1,3,2] 返回如下的树: 2 / ...
  • wutingyehe
  • wutingyehe
  • 2016-04-18 20:25:03
  • 458

Lintcode前序遍历和中序遍历树构造二叉树

样例 给出中序遍历:[1,2,3]和前序遍历:[2,1,3]. 返回如下的树: 2 / \ 1 /** * Definition of TreeNode: * class...
  • susser43
  • susser43
  • 2015-06-14 16:15:35
  • 1012

前序遍历和中序遍历构造二叉树[lintcode]

/** * Definition of TreeNode: * class TreeNode { * public: * int val; * TreeNode *left,...
  • xs_520
  • xs_520
  • 2017-08-05 14:11:37
  • 708

JAVA二叉树,给出先序遍历和中序遍历,构造出新的二叉树

注意点; 1.确定整棵二叉树的根节点即先序遍历中的第一个元素root 2.确定root在中序遍历元素的位置,root左边的元素为二叉树的左子树元素Lchild,右边为右子树元素Rchild 3....
  • coder_fkr
  • coder_fkr
  • 2016-05-14 23:04:47
  • 1767

JAVA版本:根据二叉树的中序遍历和后序遍历构造出二叉树

根据二叉树的中序遍历和后序遍历构造出二叉树 给出二叉树的中序遍历数组和后序遍历数组构造出该二叉树 二叉树的中序遍历和后序遍历分别为下面的数组: int[] inorder = {12,15,...
  • seagal890
  • seagal890
  • 2018-03-31 20:03:01
  • 13

根据中序遍历和后序遍历树构造二叉树

根据中序遍历和后序遍历树构造二叉树注意事项:可以假设树中不存在相同数值的节点...
  • wu2304211
  • wu2304211
  • 2017-01-24 17:23:36
  • 302

[LeetCode]106 根据中序遍历和后序遍历构建二叉树

Construct Binary Tree from Inorder and Postorder Traversal(根据中序遍历和后序遍历构建二叉树)【难度:Medium】 Given inord...
  • qq_14821023
  • qq_14821023
  • 2016-02-29 14:23:25
  • 1208

通过二叉树的中序和后序遍历序列构造二叉树(非递归)

通过二叉树的中序和后序遍历序列构造二叉树的非递归实现方法
  • zaizai09
  • zaizai09
  • 2014-05-10 19:55:38
  • 1914

树的学习——(递归构建二叉树、递归非递归前序中序后序遍历二叉树、根据前序序列、中序序列构建二叉树)

前言 最近两个星期一直都在断断续续的学习二叉树的数据结构,昨晚突然有点融汇贯通的感觉,这里记录一下吧 题目要求 给定前序序列,abc##de#g##f###,构建二叉树,并且用递归和非递归两种方法...
  • zinss26914
  • zinss26914
  • 2012-12-29 10:46:55
  • 7785
收藏助手
不良信息举报
您举报文章:LintCode 72. 中序遍历和后序遍历树构造二叉树
举报原因:
原因补充:

(最多只允许输入30个字)