二叉树按层打印与zigzag打印

#include "Tree.h"
using namespace std;
void printByLevel(Node* head)
{
    if(head == nullptr)
        return;
    queue<Node*> nQue;
    int level = 1;
    Node* Last = head;
    Node* nLast = nullptr;
    nQue.push(head);
    cout << "Level" << level++ << " : " ;
    while(!nQue.empty())
    {
        head = nQue.front();
        nQue.pop();
        cout << head->value << " ";
        if(head->left)
        {
            nQue.push(head->left);
            nLast = head->left;
        }
        if(head->right)
        {
            nQue.push(head->right);
            nLast = head->right;
        }
        if(head == Last && !nQue.empty())
        {
            cout << endl;
            Last = nLast;
             cout << "Level" << level++ << " : " ;
        }
    }
    cout << endl;
}

void printLevel(int level, bool lr)
{
      cout << "level" << level << "from";
    if(lr)
        cout << "left to right" << endl;
    else
        cout << "right to left" << endl;
}
void printByZigZag(Node* head)
{
    if(head == nullptr)
        return;
    deque<Node*> nDeq;
    int level = 1;
    bool lr = true;
    Node* Last = head;
    Node* nLast = nullptr;
    nDeq.push_back(head);
    printLevel(level++, lr);
    while(!nDeq.empty())
    {
        if(lr)
        {
            head = nDeq.front();
            nDeq.pop_front();
            if(head->left)
            {
                nLast = nLast == nullptr ? head->left : nLast;
                nDeq.push_back(head->left);
            }
            if(head->right)
            {
                nLast = nLast == nullptr ? head->right : nLast;
                nDeq.push_back(head->right);
            }

        } else {
            head = nDeq.back();
            nDeq.pop_back();
            if(head->right)
            {
                nLast = nLast == nullptr ? head->right : nLast;
                nDeq.push_front(head->right);
            }
            if(head->left)
            {
                nLast = nLast == nullptr ? head->left : nLast;
                nDeq.push_front(head->left);
            }
        }

        cout << head->value << " ";
        if(head == Last && !nDeq.empty())
        {
            lr = !lr;
            Last = nLast;
            nLast = nullptr;
            cout << endl;
            printLevel(level++, lr);
        }
    }
    cout << endl;
}

int main()
{
     Node* pNode0 = new Node(0);
    Node* pNode1 = new Node(5);
    Node* pNode2 = new Node(2);
    Node* pNode3 = new Node(3);
    Node* pNode4 = new Node(6);
    Node* pNode5 = new Node(7);
    Node* pNode6 = new Node(8);

    connectTree(pNode0, pNode1, pNode2);
    connectTree(pNode1, pNode3, pNode4);
    connectTree(pNode2, pNode5, pNode6);

    printByLevel(pNode0);
    printByZigZag(pNode0);
}

猜你喜欢

转载自blog.csdn.net/wzc2608/article/details/80868011