Given preorder and inorder traversal of a tree, construct the binary tree.
Note:
You may assume that duplicates do not exist in the tree.
给出树的中序和先序遍历 要求返回树 中序结果{1,2,5,4,3,6} 先序{4,2,1,5,3,6}根据先序可以确定根节点为preorder[0] 从中序中可以以根节点为界分出左右子树节点 进行递归赋值 代码如下:
public class Solution { public TreeNode buildTree(int[] preorder, int[] inorder) { if(preorder.length==0&&inorder.length==0){ return null; } TreeNode root=new TreeNode(preorder[0]); int begindex=0; for(int i=0;i<inorder.length;i++){ if(inorder[i]==preorder[0]){ begindex=i; break; } } int leftlen=begindex; int rightlen=inorder.length-begindex-1; int[] leftpre=new int[leftlen]; int[] leftino=new int[leftlen]; for(int i=0;i<begindex;i++){ leftpre[i]=preorder[i+1]; leftino[i]=inorder[i]; } root.left=buildTree(leftpre, leftino); int[] rightpre=new int[rightlen]; int[] rightino=new int[rightlen]; for(int i=0;i<rightlen;i++){ rightpre[i]=preorder[i+begindex+1]; rightino[i]=inorder[i+begindex+1]; } root.right=buildTree(rightpre, rightino); return root; } }
Construct Binary Tree from Preorder and Inorder Traversal
原文地址:http://blog.csdn.net/u012734829/article/details/42265051