你这个函数是前序遍历的算法, 不过把 visit(t->GetData()) 换成 申请结点的语句 就是 完全先序建立二叉树 的算法了
不是从第一个#号才开始递归, 而是从第一个结点就开始递归了, 在这道题也就是A
A不等于#, 所以执行分支体里的 visit(t->GetData()) (建立根结点) 和 PreOrder(t->Left(),visit) (建立左子树) , 第二句即递归调用, B 和 C 类推
到第一个#时, 即不符合条件跳过分支, 因为后面没有语句了所以函数结束返回, 返回到递归栈顶的函数(也就是最后一个调用的函数), 也就是 C 的 PreOrder(t->Left(),visit) 执行完毕, 继续执行它下面的 PreOrder(t->Right(),visit), 而这又是一个递归调用, 如此类推, 直到返回到最开始调用 A 的函数结束, 整个递归也就结束, 树也就建好了
再总结一下思路:先建立根结点, 再建立左子树, 再建立右子树, 而每棵子树建立也遵循这个顺序
我以前也很迷惑,后来把HANOI塔问题搞明白后,二叉树就好理解多啦.