Java erstellt einen Binärbaum basierend auf Vorbestellungs- und Inorder-Traversalsequenzen

Konstruieren Sie einen Binärbaum basierend auf Vorbestellungs- und Inorder-Traversalsequenzen

Problembeschreibung

Gegeben sind zwei Integer-Arrays preorder und inorder, wobei preorder die Vorbestellungsdurchquerung eines Binärbaums und inorder die Inorder-Durchquerung desselben Baums ist. Erstellen Sie einen Binärbaum und geben Sie seinen Wurzelknoten zurück.

1 <= preorder.length <= 3000
inorder.length == preorder.length
-3000 <= preorder[i], inorder[i] <= 3000
preorder 和 inorder 均 无重复 元素
inorder 均出现在 preorder
preorder 保证 为二叉树的前序遍历序列
inorder 保证 为二叉树的中序遍历序列。

Beispiel

Fügen Sie hier eine Bildbeschreibung ein

Originaltitel ABl. Link

https://leetcode.cn/problems/construct-binary-tree-from-preorder-and-inorder-traversal/

Antwortcode

/**
 * Definition for a binary tree node.
 * public 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;
 *     }
 * }
 */
class Solution {
    
    
    public TreeNode buildTree(int[] preorder, int[] inorder) {
    
    
        int inbegin = 0;
        int inend = inorder.length-1;
        return buildTreeChild(preorder,inorder,inbegin,inend);

    }
    public int i = 0;
    public TreeNode buildTreeChild(int[] preorder,int[] inorder,int inbegin,int inend){
    
    
        if(inbegin>inend){
    
    
            return null;
        }
        TreeNode root = new TreeNode(preorder[i]);
        int rootIndex = findIndex(inorder,inbegin,inend,preorder[i]);
        i++;
        root.left = buildTreeChild(preorder,inorder,inbegin,rootIndex-1);
        root.right = buildTreeChild(preorder,inorder,rootIndex+1,inend);

        return root;

    
    }
    private int findIndex(int[] inorder,int inbegin,int inend,int k){
    
    
        int j = inbegin;
        for(j = inbegin;j<= inend;j++){
    
    
            if(inorder[j] == k){
    
    
                return j;
            }
        }
        return -1;
    }
}

Supongo que te gusta

Origin blog.csdn.net/baixian110/article/details/130960301
Recomendado
Clasificación