索引
链接
https://leetcode-cn.com/problems/construct-binary-tree-from-preorder-and-inorder-traversal/
代码
树的思路其实挺简单,就是想明白处在根节点时该干什么,然后写成递归的处理每个节点就行。这道题就是不断找出子树的根节点,拼接到当前的根节点。
/**
 * Definition for a binary tree node.
 * public class TreeNode {
 *     int val;
 *     TreeNode left;
 *     TreeNode right;
 *     TreeNode(int x) { val = x; }
 * }
 */
import java.util.Arrays;
class Solution {
    public TreeNode buildTree(int[] preorder, int[] inorder) {
if (preorder.length == 0) {
            return null;
        }
        int rootNum = preorder[0];
        // 根节点在中序遍历结果中的index
        int rootAtInOrderIndex = 0;
        for (int i = 0; i < inorder.length; i++) {
            if (inorder[i] == rootNum) {
                rootAtInOrderIndex = i;
            }
        }
        TreeNode root = new TreeNode(rootNum);
        root.left = buildTree(Arrays.copyOfRange(preorder, 1, rootAtInOrderIndex + 1),
                Arrays.copyOfRange(inorder, 0, rootAtInOrderIndex));
        root.right = buildTree(Arrays.copyOfRange(preorder, rootAtInOrderIndex + 1, preorder.length),
                Arrays.copyOfRange(inorder, rootAtInOrderIndex + 1, inorder.length));
        return root;
    }
}
                                                        原创文章,作者:geekgao,如若转载,请注明出处:https://www.geekgao.cn/archives/2683
 
                

 微信
                                                            微信                                                     支付宝
                                                            支付宝