1. A method comprising: receiving, at a computing device, medical information for a patient, wherein each medical information item in the medical information comprises a date, a source, and a medical state; constructing, in a memory of the computing device, a diagnosis tree for the patient, wherein the diagnosis tree comprises a patient node, the patient node having first children nodes corresponding to the dates or the sources, and the first children nodes having second children nodes corresponding to the medical states; and generating a diagnosis for the patient using the constructed diagnosis tree.