1.给定一棵二叉树,要求按分层遍历该二叉树,即从上到下按层次访问该二叉树(每一层将单独输出一行)。PrintNodeByLevel(Node *root)
2.另外写一个函数,打印二叉树中某层次的节点(从左到右),其中根节点为第0层,函数原型为PrintNodeAtLevel(Node *root, int level),成功返回1,失败返回0。
如果解决了第二个问题,则问题1可采用问题2的解法来依次遍历其各层次节点,先考虑问题2的解法。
假设要访问二叉树中第k层的节点,那么其实可以把它转换成分别访问“以该二叉树根节点的左右子节点为根节点的两棵子树”中层次为k-1的节点。
struct Node
{
int data;
Node *lchild;
Node *rchild;
};
// 递归算法求出第level层中的节点,成功返回1,失败返回0
int PrintNodeAtLevel(Node *root, int level)
{
if(root==NULL||level<0)
return 0;
if(level==0)
{
cout<<root->data<<endl;
return 1;
}
else
return PrintNodeAtLevel(root->lchild, level-1)+PrintNodeAtLevel(root->rchild, level-1);
}
// 利用PrintNodeAtLevel和深度depth求解PrintNodeByLevel(层次遍历)
int PrintNodeByLevel(Node *root, int depth)
{
for(int level=0;level<depth;level++)
PrintNodeAtLevel(root, level);
return 0;
}
// 直接利用PrintNodeAtLevel函数的返回值
int PrintNodeByLevel(Node *root)
{
for(int level=0;;level++)
{
if(!PrintNodeAtLevel(root, level))
break;
}
return 0;
}