Given preorder and inorder traversal of a tree, construct the binary tree.
Note:
You may assume that duplicates do not exist in the tree.
思路:首先根据前序遍历得到根节点,然后在中序遍历中得到根节点的位置,左边的为左子树,右边的为右子树。
然后再递归求解左子树和右子树的构造即可。代码如下:
/** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * TreeNode right; * TreeNode(int x) { val = x; } * } */ public class Solution { public TreeNode buildTree(int[] preorder, int[] inorder) { /** * 1.根据前序遍历,先确定根节点 * 2.然后在中序遍历中查找根节点,确定根节点在中序遍历的位置 * 3.根据索引位置分割左右子树的前序和中序遍历 * 4.递归求解根节点的左右子树 */ if(preorder.length == 0 || inorder.length == 0) return null; TreeNode root = new TreeNode(preorder[0]); int k = 0; for(; k < inorder.length; k++){ if(inorder[k] == preorder[0]){ break; } } int[] p1 = Arrays.copyOfRange(preorder,1,k+1); int[] q1 = Arrays.copyOfRange(preorder,k+1,preorder.length); int[] p2 = Arrays.copyOfRange(inorder,0,k); int[] q2 = Arrays.copyOfRange(inorder,k+1,inorder.length); root.left = buildTree(p1,p2); root.right = buildTree(q1,q2); return root; } }
版权声明:本文为博主原创文章,未经博主允许不得转载。
leetCode 105.Construct Binary Tree from Preorder and Inorder Traversal (根据前序遍历和中序遍历构造二叉树)
原文地址:http://blog.csdn.net/xygy8860/article/details/47189635