LeetCode--已知前序遍历和中序遍历构造二叉树_已知一棵树的前序遍历和中序遍历

📅 2026/7/4 11:57:24 👁️ 阅读次数 📝 编程学习
LeetCode--已知前序遍历和中序遍历构造二叉树_已知一棵树的前序遍历和中序遍历

题干:

根据一棵树的前序遍历与中序遍历构造二叉树。

注意:
你可以假设树中没有重复的元素。

例如,给出

前序遍历 preorder = [3,9,20,15,7]
中序遍历 inorder = [9,3,15,20,7]

返回如下的二叉树:

    3/ \9  20/  \15   7

解答:

/*** Definition for a binary tree node.* public class TreeNode {*     int val;*     TreeNode left;*     TreeNode right;*     TreeNode(int x) { val = x; }* }*/
class Solution {public TreeNode buildTree(int[] preorder, int[] inorder) {if(preorder.length == 0){return null ;}if(preorder.length == 1){return new TreeNode(preorder[0]);}TreeNode root = new TreeNode(preorder[0]);int rootNum = 0 ;for(int i =0 ; i < inorder.length; i ++){if(inorder[i] == preorder[0]){rootNum = i;break;}}int[] inLeft = Arrays.copyOfRange(inorder,0,rootNum);int[] preLeft = Arrays.copyOfRange(preorder,1,1+inLeft.length);int[] inRight =  Arrays.copyOfRange(inorder,rootNum+1,inorder.length);int[] preRight = Arrays.copyOfRange(preorder,inorder.length-inRight.length,inorder.length);root.left = buildTree(preLeft,inLeft);root.right = buildTree(preRight,inRight);return root;}
}

 

 

同名原创公众号:程序大视界