#include<iostream>
#include<vector>
using namespace std;
struct Node
{
int data;
Node* lchild;
Node* rchild;
};
void PrintNodeByLevel(Node *root)
{
if(root==NULL)
return;
vector<Node*> vec;
vec.push_back(root);
vec.push_back(NULL);
int cur=0;
int last=1;
while(cur<vec.size())
{
last=vec.size();
while(cur<last)
{
if(!vec[cur])
{
cur++;
//如果最后一元素不是NULL元素,就插入NULL
//否则vec末尾出现连续的NULL循环不会终止
if(vec[vec.size()-1])
vec.push_back(NULL);
}
else
{
if(vec[cur]->rchild)
vec.push_back(vec[cur]->rchild);
if(vec[cur]->lchild)
vec.push_back(vec[cur]->lchild);
cur++;
}
}
}
vec.pop_back();
while(vec.size())
{
if(vec[vec.size()-1]!=NULL)
cout<<vec[vec.size()-1]->data<<" ";
else
cout<<endl;
vec.pop_back();
}
}
int main()
{
Node *n1=new Node();
Node *n2=new Node();
Node *n3=new Node();
Node *n4=new Node();
Node *n5=new Node();
n1->data=1;
n2->data=2;
n3->data=3;
n4->data=4;
n5->data=5;
n1->lchild=n2;
n1->rchild=n3;
n2->lchild=n4;
n2->rchild=n5;
n4->lchild=NULL;
n4->rchild=NULL;
n5->lchild=NULL;
n5->rchild=NULL;
PrintNodeByLevel(n1);
int i;
cin>>i;
return 0;
}
题目要求:按深度从下到上访问二叉树,每层访问顺序从左到右
思路先把每层节点放在vec中,节点入vec顺序为先右节点再左节点,反向遍历vec,利用STL vector中的pop_back()函数
代码如下