您的位置:首页 > 其它

LeetCode Construct Binary Tree from Inorder and Postorder Traversal

2016-01-01 18:29 405 查看
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;
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: