Construct Binary Tree from Preorder and Inorder Traversal

Given preorder and inorder traversal of a tree, construct the binary tree.

Note:
You may assume that duplicates do not exist in the tree.

 

思路:递归思想

注意事项:画图,把长度计算正确

JAVA代码:

  1. private TreeNode buildTree(int[] preorder,int pstart,int[] inorder,int istart,int length) {
  2. if(preorder==null || length==0) return null;  // 判定条件
  3. if(length==1) {
  4. return new TreeNode(preorder[pstart]);
  5. }
  6. int tmp = preorder[pstart];
  7. TreeNode root = new TreeNode(tmp);
  8. int i = 0;
  9. for(i=0;i<length;i++) {
  10. if(inorder[istart+i] == tmp) {
  11. break;
  12. }
  13. }
  14. root.left = buildTree(preorder,pstart+1,inorder,istart,i);  // 注意左侧的长度 i
  15. root.right = buildTree(preorder,pstart+i+1,inorder,istart+i+1,length-(i+1)); // 注意右侧的长度,为length-(i+1)
  16. return root;
  17. }
  18. public TreeNode buildTree(int[] preorder, int[] inorder) {
  19. if(preorder==null || inorder==null) return null;
  20. int plen = preorder.length;
  21. int ilen = inorder.length;
  22. if(plen != ilen) return null;
  23. return buildTree(preorder,0,inorder,0,plen);
  24. }
posted @ 2014-07-02 20:02  purejade  阅读(77)  评论(0)    收藏  举报