1. A method comprising: receiving, at a computing device, medical information for a patient, wherein the medical information comprises dates, sources, and medical states; 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, each of the first children nodes comprising at least one of the dates and at least one of the sources, and each of the first children nodes having second children nodes, each of the second children nodes comprising at least one of the medical states of a corresponding one of the dates and one of the sources; and generating a diagnosis for the patient using the diagnosis tree.