I have pinpointed the problem. It is the AddNewNode function.
I guess I gotta have a better understanding of the whole tree thing.
The current assuption is:
1) all nodes on the left branch are on the left (or equal) to the parent, and all nodes on the right brach are on the right (or equal) to the parent.
Let's examine if this is strong enough. check ..... yes, the fundamental logic is wrong.
To solve the problem, the assumption of tree structure should be changed to:
the parent node is the same to its left child.
however, this leads to entire change of the algorihtm: e.g., swapping/ adding. of nodes. the rewriting of corresponding sections should be carefully taken care of.