剑指offer7 重建二叉树
/** * Definition for binary tree * public class TreeNode { * int val; * TreeNode left; * TreeNode right; * TreeNode(int x) { val = x; } * } */ public class Solution { public TreeNode reConstructBinaryTree(int [] pre,int [] in) { TreeNode head = forReconstruct(pre,in,0,pre.length-1,0,in.length-1); return head; } private TreeNode forReconstruct(int [] pre,int [] in,int pre_start,int pre_end,int in_start,int in_end) { TreeNode node = new TreeNode(pre[pre_start]); //find val in array_in int index = in_start; for(;index<=in_end;index++){ if(in[index]==pre[pre_start]) break; } if(index>in_start) node.left=forReconstruct(pre,in,pre_start+1,pre_start+1+index-in_start-1,in_start,index-1); if(index<in_end) node.right=forReconstruct(pre,in,pre_start+1+index-in_start,pre_end,index+1,in_end); return node; } }

# -*- coding:utf-8 -*- # class TreeNode: # def __init__(self, x): # self.val = x # self.left = None # self.right = None class Solution: # 返回构造的TreeNode根节点 def reConstructBinaryTree(self, pre, tin): # write code here if pre is None or tin is None or len(pre)<1 or len(tin)<1 or len(pre)!=len(tin): return None return self._constructAndGetRoot(pre,tin,0,len(pre)-1,0,len(tin)-1) def _constructAndGetRoot(self,pre,tin,pre_start,pre_end,tin_start,tin_end): # 如果只有一个元素,直接返回;如果没有元素,返回None if pre_start==pre_end: return TreeNode(pre[pre_start]) if pre_start>pre_end: return None # 在tin里找到pre的头元素pre[pre_start] tin_index = -1 for i in range(tin_start,tin_end+1): if tin[i]==pre[pre_start]: tin_index = i break left_length = tin_index-tin_start thisNode = ListNode(pre[pre_start]) thisNode.left = self._constructAndGetRoot(pre,tin,pre_start+1,pre_start+left_length,tin_start,tin_index-1) thisNode.right= self._constructAndGetRoot(pre,tin,pre_start+left_length+1,pre_end,tin_index+1,tin_end) return thisNode
运行时间:45ms
占用内存:5732k

浙公网安备 33010602011771号