递归版本:
void _PreOrderR(Node<T>* pRoot)
{
if (NULL == pRoot)//出口
return;
cout << pRoot->data << " ";//对节点进行访问
_PreOrderR(pRoot->LC);//访问左子树
_PreOrderR(pRoot->RC);//访问右子树
}
非递归版本:
基本思想,先对结点进行访问,在去访问左右孩子,优先访问左孩子,左孩子不存在在去访问右孩子
void _PreOrderNor(Node<T>* pRoot)
{
if (NULL == pRoot)
return;
stack<Node<T>*> s;//利用栈结构保存结点
s.push(pRoot);
while (!s.empty())
{
//每次取到栈顶元素进行访问
Node<T>* pTmp = s.top();
s.pop();
cout << pTmp->data << " ";
if (pTmp->RC)//该节点的右孩子存在,保存
s.push(pTmp->RC);
if (pTmp->LC)//该节点的左孩子存在,保存
s.push(pTmp->LC);
//若,该节点没有左孩子,那么下次访问的就是他的右孩子,不然总是先访问左孩子
}
}