:type nums: List[int] :rtype: TreeNode """ if not nums: return None return self.buildBST(nums,0,len(nums)-1) def buildBST(self,nums,i,j): if i> j : return None if i == j: no = TreeNode(nums[i]) return no mid = (i+j)//2 root = TreeNode(nums[mid]) left = self.buildBST(nums,i,mid-1) right = self.buildBST(nums,mid+1,j) root.left = left root.right = right return root if __name__ == '__main__': so = Solution() root = so.sortedArrayToBST([1,2,3,4,5,6,7]) TreeNode.inOrderRec(root) print() TreeNode.preOrder(root)
t = TreeNode(begin) ans.append(t) return ans if begin + 1 == end: t1 = TreeNode(begin) t1.right = TreeNode(end) ans.append(t1) t2 = TreeNode(end) t2.left = TreeNode(begin) ans.append(t2) return ans for i in range(begin, end + 1): leftTreeSet = self.dfs(begin, i - 1) rightTreeSet = self.dfs(i + 1, end) for nodeL in leftTreeSet: for nodeR in rightTreeSet: ro = TreeNode(i) ro.left = nodeL ro.right = nodeR ans.append(ro) return ans if __name__ == '__main__': so = Solution() ans = so.generateTrees(2) for n in ans: TreeNode.preOrder(n) print()
return ans if begin +1 == end: t1 = TreeNode(begin) t1.right = TreeNode(end) ans.append(t1) t2 = TreeNode(end) t2.left = TreeNode(begin) ans.append(t2) return ans for i in range(begin,end+1): leftTreeSet = self.dfs(begin,i-1) rightTreeSet = self.dfs(i+1,end) for nodeL in leftTreeSet: for nodeR in rightTreeSet: ro = TreeNode(i) ro.left = nodeL ro.right = nodeR ans.append(ro) return ans if __name__ == '__main__': so = Solution() ans = so.generateTrees(2) for n in ans: TreeNode.preOrder(n) print()