我正在尝试解决如何从中序和预序构造二叉树,这就是我的方法。 我面临的问题是,由于递归,我无法在 fillLeftSide 和 fillRightSide 函数中到达树的右侧部分。任何帮助将不胜感激。 ,,,
import java.util.ArrayList;
import java.util.List;
class TreeNode {
int val;
TreeNode left;
TreeNode right;
TreeNode() {}
TreeNode(int val) { this.val = val; }
TreeNode(int val, TreeNode left, TreeNode right) {
this.val = val;
this.left = left;
this.right = right;
}
}
public class Solution {
int preOrder_counter=0;
List<Integer> leftTree=new ArrayList<>();
List<Integer> rightTree=new ArrayList<>();
public TreeNode buildTree(int[] preorder, int[] inorder) {
int root_val=preorder[0];
preOrder_counter++;
int root_position=findRoot(inorder,root_val);
for(int i=0;i<=root_position-1;i++){
leftTree.add(inorder[i]);
}
for(int i=root_position+1;i<inorder.length;i++){
rightTree.add(inorder[i]);
}
TreeNode root=new TreeNode(root_val);
root.left=new TreeNode(0);
root.right=new TreeNode(0);
fillLeftSide(root.left,leftTree,preorder);
fillRightSide(root.right,rightTree,preorder);
return root;
}
public int findRoot(int[] arr,int val){
for(int i=0;i<arr.length;i++){
if(arr[i]==val)
return i;
}
return -1;
}
public void fillLeftSide(TreeNode root,List<Integer> leftTree,int[] preorder){
if(!leftTree.isEmpty()){
root.val=preorder[preOrder_counter];
leftTree.remove(Integer.valueOf(preorder[preOrder_counter]));
preOrder_counter++;
}
if(!leftTree.isEmpty()){
root.left=new TreeNode(0);
fillLeftSide(root.left,leftTree,preorder);
}
if(!leftTree.isEmpty()) {
root.right = new TreeNode(0);
fillLeftSide(root.right, leftTree, preorder);
}
}
public void fillRightSide(TreeNode root,List<Integer> rightTree,int[] preorder){
if(!rightTree.isEmpty()){
root.val=preorder[preOrder_counter];
rightTree.remove(Integer.valueOf(preorder[preOrder_counter]));
preOrder_counter++;
}
if(!rightTree.isEmpty()){
root.left=new TreeNode(0);
fillLeftSide(root.left,rightTree,preorder);
}
if(!rightTree.isEmpty()) {
root.right = new TreeNode(0);
fillLeftSide(root.right, rightTree, preorder);
}
}
}
'''
我得到的输出是 3 9 20 null null 15 null 7 而我应该得到 3 9 20 null null 15 7
请帮帮我...