I have a little history question, namely, as the title says, I am looking for early uses of trees (as a data structure, search tree, whatever) in computer science.
Wikipedia says that the first use of tree in mathematics was by Cayley in 1857.
Since the use in computer science is taken directly from mathematics, it seems more fundamental to ask when they originated there. Unless computer scientists originally called trees something else, the first computer scientist to use "tree" doesn't seem any more significant than, say, the first Australian to use "tree".
According to Donald Knuth's TAOCP, Vol. 1, pg. 459 the following papers might be considered as one of the first appearances of trees in CS.
- H. G. Kahrimanian, Analytical Differentiation by a Digital Computer, Symposium on Automatic Programming, 6–14, 1952
- K.E. Iverson and L.R. Johnson, IBM Corp. research reports RC-390, RC-603, 1961
- A.J. Perils and C. Thornton, Threaded trees, CACM 3, 195–204, 1960
Check out TAOCP for more information and more references.
I found this paper in the (BCS) Computer Journal for 1960:
P. F. Windley: Trees, forests, and rearranging.
He introduces the concept of "trees", "described briefly by Douglas (1959)" [Sandy Douglas] "and attributed to Berners-Lee" [Conway Berners-Lee, father of Tim].
Interestingly his trees are botanically more accurate than modern CS trees, in that they have the root at the bottom rather than the top!
Coincidentally, the last citation in the paper is to a paper which Windley co-authored with Tony Rowland Jones and "L. F. Kay", which is a misprint for L. R. Kay, my father, who went on to run UCCA, the central University Admissions system in the UK.
A letter from Conway B-L to the Computer Journal commenting on this paper, and a response from Windley, is split between pages 174 and 184 of the following issue:
Lambda calculus dates back to the 1930's. Its grammar is an early application of trees, specifically abstract syntax trees. Every LC term is a tree. Variables are the leaf nodes. Both abstraction and application terms consist of other terms, so they are non-leaf nodes.
I don't know when LC terms were first thought of as trees. However, the early proofs involving LC required case analysis, much like what programmers writing programs to walk ASTs do now.