码迷,mamicode.com
首页 > 其他好文 > 详细

3.10 分层遍历二叉树

时间:2015-05-07 14:40:05      阅读:146      评论:0      收藏:0      [点我收藏+]

标签:

题目1:写一个函数,打印二叉树中某层次的节点(从左到右),其中根节点为第0层。

思路:利用递归算法,思想是:要求访问二叉树中第k层的节点,那么其实就是要访问“以该二叉树根节点的左右子节点为根节点的两颗子树”中层次为k-1的节点


代码:

struct pNode {
    int data;
    pNode *lChild;
    pNode *rChild;
};

int printNodeAtLevel(pNode *root, int level) {
    if(root == NULL || level == -1) return 0;
    if(level == 0) {
        cout << root->data << ' ';
        return 1;
    }
    return printNodeAtLevel(root->lChile, level-1) + printNodeAtLevel(root->rChild, level-1);
}


题目二:

分层遍历一颗二叉树,如果用一个循环,来调用题目1中的代码的话,效率太低了,因为那样的话,每打印一层的信息的话, 那么都要从根节点重新开始往下找。

所以要找数据结构要存储上一层的信息,,当打印第k层的时候,直接找出k+1层的信息。

所以这里可以用队列来实现!


思路:

struct pNode {
    int data;
    pNode *lChild;
    pNode *rChild;
};

void PrintNodeByLevel(pNode *root) {
    if(root == NULL) return ;
    queue<Pnode *> root;
    q.push(root);
    while(!q.empty()) {
        cout << q.front()->data << ' ';
        if(q.front()->lChild) q.push(q.front()->lChild);
        if(q.front()->rChild) q.push(q.front()->rChild);
        q.pop();
    }
    return ;
}







3.10 分层遍历二叉树

标签:

原文地址:http://blog.csdn.net/u010470972/article/details/45559043

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!