Construct Binary Tree from Inorder and Postorder Traversal(给出中序后序求二叉树)

来源:互联网 发布:网络ip地址怎么修改 编辑:程序博客网 时间:2024/06/06 00:34

题目原型:

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

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

基本思路:

根据后序序列找到根,然后根据根节点分割中序序列。

public TreeNode buildTree(int[] inorder, int[] postorder){if(inorder.length==0&&postorder.length==0)return null;else{//找到根节点的值TreeNode root = new TreeNode(postorder[postorder.length-1]);//在中序序列中找到根节点int targetIndex = -1;for(int i = 0;i<inorder.length;i++){if(inorder[i]==postorder[postorder.length-1]){targetIndex = i;break;}}//求出左子树和右子树的长度int lenOfLeft = targetIndex;int lenOfRight = inorder.length-targetIndex-1;//求出左子树int[] leftInorder = new int[lenOfLeft];int[] leftPostorder = new int[lenOfLeft];for(int i = 0;i<targetIndex;i++){leftInorder[i] = inorder[i];leftPostorder[i] = postorder[i];}root.left = buildTree(leftInorder, leftPostorder);//求出右子树int[] rightInorder = new int[lenOfRight];int[] rightPostorder = new int[lenOfRight];for(int i = targetIndex+1;i<inorder.length;i++){rightInorder[i-targetIndex-1] = inorder[i];rightPostorder[i-targetIndex-1] = postorder[i-1];}root.right = buildTree(rightInorder, rightPostorder);return root;}}}



0 0
原创粉丝点击