二叉树的遍历

二叉树的遍历方式主要分为前序、中序、后序、层次遍历几种。

前序、中序、后序分为递归和非递归方法两种,但其实根本来说都是使用堆栈来实现的,因为递归方法其实也是使用堆栈实现的。

前序遍历递归方法代码实现如下所示:

void PreOrderRec(Node * node)
{
    if (node)
    {
	    cout << node->data << " ";   // 先输出当前结点   
	    PreOrderRec(node->left);     // 然后输出左孩子
	    PreOrderRec(node->right);    // 最后输出右孩子
    }
  
}

前序遍历非递归方法代码实现如下所示:

void PreOrderNonRec(Node * node)
{
    Node * T = node;
	stack S;

	while (!S.empty() || T)
    {
        while (T)
        {
            cout << T->data << " ";   //先输出当前结点  
            S.push(T);
            T = T->left;         
        }
        if(!S.empty()){
            T = S.top();
            S.pop();
            T = T->right;        
            
        }                              

    }
}

 

 

中序遍历递归方法实现代码如下:

void InOrderRec(Node * node)
{
    if (node)
    {
	    cout << node->data << " ";   // 先输出当前结点   
	    InOrderRec(node->left);     // 然后输出左孩子
	    InOrderRec(node->right);    // 最后输出右孩子
    }
  
}

中序遍历非递归方法代码实现如下所示:

void InOrderNonRec(Node * node)
{
    Node * T = node;
    stack S;

    while (!S.empty() || T)
    {
        while (T)
        {
            S.push(T);
            T = T->left;         
        }
        if(!S.empty()){
            T = S.top();
            S.pop();
            cout << T->data << " "; 
            T = T->right;                
        }                              

    }
}

后序遍历递归方法实现代码如下:

void PostOrderRec(Node * node)
{
    if (node)
    {   
	    PostOrderRec(node->left);     // 先输出左孩子
	    PostOrderRec(node->right);    // 然后输出右孩子
            cout << node->data << " ";    // 最后输出当前结点
    }
  
}

 

你可能感兴趣的:(数据结构与算法)