#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);
}
二叉树按层打印与zigzag打印
猜你喜欢
转载自blog.csdn.net/wzc2608/article/details/80868011
今日推荐
周排行