从中序和前序数组构造二叉树

时间:2021-02-27 04:33:23

标签: java binary-tree

我正在尝试解决如何从中序和预序构造二叉树,这就是我的方法。 我面临的问题是,由于递归,我无法在 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

请帮帮我...

0 个答案:

没有答案