博主算法方面比较薄弱,写得不好,欢迎大家给我留言哈!!!
leetCode解题报告之构造二叉树(递归)(二)
inorder,int[] postorder) {
if (postorder.length == 0 || inorder.length == 0)
return null;
int len = inorder.length;
postIndex = postorder.length - 1;
return createTreeNode(postorder,inorder,0,len-1);
}
public TreeNode createTreeNode(int[] inorder, int[] postorder, int inLeft, int inRight){
if (inLeft == inRight){
TreeNode node = new TreeNode(inorder[inLeft]);
node.left = null;
node.right = null;
return node;
}
int val = postorder[postIndex];
int findIndex = inLeft;
while (findIndex != inRight && val != inorder[findIndex]){
findIndex++;
}
TreeNode leftNode;
TreeNode rightNode;
if (findIndex == inRight){
rightNode = null;
}else{
--postIndex;
rightNode = createTreeNode(inorder,postorder,findIndex+1,inRight);
}
if (findIndex == inLeft){
leftNode = null;
}else{
--postIndex;
leftNode = createTreeNode(inorder,postorder,inLeft,findIndex-1);
}
TreeNode root = new TreeNode(val);
root.left = leftNode;
root.right = rightNode;
return root;
}
}