Tree Implementation in Java
I don't see any reason for the added complexity of the second implementation. The Node class doesn't provide any methods or fields nor does it serve as a base class for your TreeNode1. It just makes naming the tree nodes worse: TreeNode is definitely a better name than Node.TreeNode1.

So in version 2 you end up with two classes:


The outer class Node does nothing useful.
The node class Node.TreeNode1 doesn't do anything a non-nested class couldn't do as well. 


Even if you embed the TreeNode1 class into a more functional outer class, there isn't much benefit from static nesting.

So I'd definitely prefer implementation 1.

A nested class can be a good solution in cases where access to the enclosing class is useful, but I'd hide it from the API user, e.g. by exposing a Node interface which is internally implemented by the nested class.