第三章 -- 分层遍历二叉树

来源:互联网 发布:淘宝几天自动确认收货? 编辑:程序博客网 时间:2024/06/07 17:48

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;}



原创粉丝点击