Given inorder and postorder traversal of a tree, construct the binary tree.
Note:
You may assume that duplicates do not exist in the tree.
题意:已经二叉树的中序遍历和后序遍历,求二叉树的结构
思路:通过后序遍历中的最后一个元素,然后通过中序遍历知道左子树的包含元素和右子树的包含元素。根据左子树的中序遍历和后序遍历构造左子树,右子树的中序遍历和后序遍历构造右子树。
代码如下:
//二叉树的结构表示为
class TreeNode
{
int val;
TreeNode left;
TreeNode right;
TreeNode(int x) {val = x;}
}
class Solution
{
public TreeNode buildTree(int[] inorder, int[] postorder)
{
int len = postorder.length;
if (0 == len) return null;
TreeNode root = new TreeNode(postorder[len - 1]);
int index = 0;
for (int i = 0; i < inorder.length; i++)
{
if (inorder[i] == postorder[len - 1])
{
index = i;
break;
}
}
int[] leftinorder = new int[index];
int[] leftpostorder = new int[index];
int[] rightinorder = new int[len - index - 1];
int[] rightpostorder = new int[len - index - 1];
for (int i = 0; i < index; i++)
{
leftinorder[i] = inorder[i];
leftpostorder[i] = postorder[i];
}
for (int i = 0; i < len - index - 1; i++)
{
rightinorder[i] = inorder[index + 1 + i];
rightpostorder[i] = postorder[index + i];
}
root.left = buildTree(leftinorder, leftpostorder);
root.right = buildTree(rightinorder, rightpostorder);
return root;
}
}