问题(假定根节点位于第0层)
1. 层次遍历二叉树(每层换行分开)
2. 层次遍历二叉树指定的某层
本文转自http://www.cnblogs.com/kaituorensheng/p/3558645.html
例如
上图中
1.
1 2 3 4 5 6 7 8
2.
第三层 7 8
可以看出得出第二问的解,第一问迎刃而解了,所以从问题二下手
1. 层次遍历二叉树指定的某层
可以得出这样的一个结论:遍历二叉树的第k层,相当于遍历二叉树根节点的左右子树的第k-1层。这样一直遍历下去,直到k=0时,输出节点即可。
int PrintNodeAtLevel(BiTree root, int level)
{
if(!root || level < 0)
return 0;
else if(level == 0)
{
cout << root->data << endl;
return 1;
}
else
return PrintNodeAtLevel(root->left, level - 1) + PrintNodeAtLevel(root->right, level - 1);
}
完整执行代码
#include<iostream>
using namespace std;
typedef struct BiTNode
{
int data;
BiTNode *left;
BiTNode *right;
}BiTNode, *BiTree;
void createTree(BiTree &root)
{
BiTree left1 = new(BiTNode);
BiTree right1 = new(BiTNode);
left1->data = 1;
left1->left = NULL;
left1->right = NULL;
right1->data = 2;
right1->left = NULL;
right1->right = NULL;
root->left = left1;
root->right = right1;
BiTree left2 = new(BiTNode);
left2->data = 3;
left2->left = NULL;
left2->right = NULL;
BiTree right2 = new(BiTNode);
right2->data = 4;
right2->left = NULL;
right2->right = NULL;
left1->left = left2;
left1->right = right2;
BiTree left3 = new(BiTNode);
left3->data = 5;
left3->left = NULL;
left3->right = NULL;
BiTree right3 = new(BiTNode);
right3->data = 6;
right3->left = NULL;
right3->right = NULL;
left2->left = left3;
left2->right = right3;
}
void deleteTree(BiTree root)
{
if(root)
{
deleteTree(root->left);
deleteTree(root->right);
delete(root);
root = NULL;
}
}
int PrintNodeAtLevel(BiTree root, int level)
{
if(!root || level < 0)
return 0;
else if(level == 0)
{
cout << root->data << endl;
return 1;
}
else
return PrintNodeAtLevel(root->left, level - 1) + PrintNodeAtLevel(root->right, level - 1);
}
int main()
{
BiTree root = new(BiTNode);
root->data = 0;
root->right = root->left = NULL;
createTree(root);
cout << "Level 0:" << endl;
PrintNodeAtLevel(root, 0);
cout << "-------------------" << endl;
cout << "Level 1:" << endl;
PrintNodeAtLevel(root, 1);
cout << "-------------------" << endl;
cout << "Level 2:" << endl;
PrintNodeAtLevel(root, 2);
cout << "-------------------" << endl;
cout << "Level 3:" << endl;
PrintNodeAtLevel(root, 3);
cout << "-------------------" << endl;
deleteTree(root);
system("pause");
}