@@ -622,7 +622,42 @@ class Solution {
622
622
}
623
623
}
624
624
```
625
+ ``` java
626
+ class Solution {
627
+ public TreeNode buildTree (int [] inorder , int [] postorder ) {
628
+ if (postorder. length == 0 || inorder. length == 0 )
629
+ return null ;
630
+ return buildHelper(inorder, 0 , inorder. length, postorder, 0 , postorder. length);
631
+
632
+ }
633
+ private TreeNode buildHelper (int [] inorder , int inorderStart , int inorderEnd , int [] postorder , int postorderStart , int postorderEnd ){
634
+ if (postorderStart == postorderEnd)
635
+ return null ;
636
+ int rootVal = postorder[postorderEnd - 1 ];
637
+ TreeNode root = new TreeNode (rootVal);
638
+ int middleIndex;
639
+ for (middleIndex = inorderStart; middleIndex < inorderEnd; middleIndex++ ){
640
+ if (inorder[middleIndex] == rootVal)
641
+ break ;
642
+ }
625
643
644
+ int leftInorderStart = inorderStart;
645
+ int leftInorderEnd = middleIndex;
646
+ int rightInorderStart = middleIndex + 1 ;
647
+ int rightInorderEnd = inorderEnd;
648
+
649
+
650
+ int leftPostorderStart = postorderStart;
651
+ int leftPostorderEnd = postorderStart + (middleIndex - inorderStart);
652
+ int rightPostorderStart = leftPostorderEnd;
653
+ int rightPostorderEnd = postorderEnd - 1 ;
654
+ root. left = buildHelper(inorder, leftInorderStart, leftInorderEnd, postorder, leftPostorderStart, leftPostorderEnd);
655
+ root. right = buildHelper(inorder, rightInorderStart, rightInorderEnd, postorder, rightPostorderStart, rightPostorderEnd);
656
+
657
+ return root;
658
+ }
659
+ }
660
+ ```
626
661
105.从前序与中序遍历序列构造二叉树
627
662
628
663
``` java
0 commit comments