How to print a binary tree of functions/terminals like a lisp statement?
I have a binary tree of functions and terminal values. I'd like to print this tree as a lisp statement would be represented!
For example, a tree with just a root of "+" and开发者_开发知识库 terminals of "2" and 4" would read (+ (2 4)).
You need to do an preorder traversal of the binary tree. So if you have the tree:
+
5 -
3 2
You would want to visit +, 5, -, 3, 2, in that order. You can do this recursively as follows (assuming your nodes have the fields value, left, and right):
public void preorder() {
if (leaf == null && right == null)
System.out.println(value);
else {
System.out.println("(");
System.out.println(value);
if(left != null) left.preorder();
if(right != null) right.preorder();
System.out.println(")");
}
}
Notice that you simply visit the current node, then the left child, then the right child.
精彩评论