[LeetCode] Construct Binary Tree from Inorder and Postorder Traversal

来源:互联网 发布:苹果电脑mac玩英雄联盟 编辑:程序博客网 时间:2024/06/06 09:38

原题地址:https://oj.leetcode.com/problems/construct-binary-tree-from-inorder-and-postorder-traversal/

Given inorder and postorder traversal of a tree, construct the binary tree.

Note:
You may assume that duplicates do not exist in the tree.


/** * Definition for binary tree * public class TreeNode { *     int val; *     TreeNode left; *     TreeNode right; *     TreeNode(int x) { val = x; } * } */public class Solution {    public TreeNode buildTree(int[] inorder, int[] postorder) {        if (inorder == null || postorder == null || inorder.length < 1 || postorder.length < 1 || inorder.length != postorder.length) {            return null;        }                  return helper(inorder, 0, inorder.length - 1, postorder, 0, postorder.length - 1);    }        private TreeNode helper(int[] inorder, int inStart, int inEnd, int[] postorder, int postStart, int postEnd) {        if (inStart > inEnd || postStart > postEnd) {            return null;        }                TreeNode root = new TreeNode(postorder[postEnd]);                int indexIn = 0;                for (int i = inStart; i <= inEnd; i++) {            if (inorder[i] == postorder[postEnd]) {                indexIn = i;            }        }        int leftLen = indexIn - inStart;                TreeNode left = helper(inorder, inStart, indexIn - 1, postorder, postStart, postStart + leftLen - 1);        TreeNode right = helper(inorder, indexIn + 1, inEnd, postorder, postStart + leftLen, postEnd - 1);                root.left = left;        root.right = right;                return root;    }}


0 0
原创粉丝点击