编程之美 3.10 分层遍历二叉树

解题思路:

一开始想到递归,发现用递归很难保证节点的访问顺序。(递归对于先,中,后序遍历都有效,但是对于层次遍历似乎没有找到可行的方法)

按照层次遍历二叉树的做法,通常用一个队列来保证节点按照先入先出的顺序来。这题的关键是如何在使用队列时确定当前所处的层次,以保证输出的每一层节点为一行。

解决办法是设置两个游标cur和last,cur指向当前处理的节点,last指向当前层的最后一个节点的下一个位置。每次内循环都是输出一整层的节点,并将它们的子节点入队列。

 

void PrintNodeByLevel(const Node *root){
    vector<const Node*> vec;
    vec.push_back(root);
    int cur = 0, last;
    int num =1;
    while(cur < vec.size()){
        last = vec.size();
        while(cur != last){
            const Node *p = vec[cur];
            cout << p->data;
            cur++;
            if (p->lchild){
                vec.push_back(p->lchild);
            }
            if (p->rchild){
                vec.push_back(p->rchild);
            }
        }
        cout << endl;
    }
}

 

转载于:https://www.cnblogs.com/xiaolongren2012/archive/2012/12/22/2829338.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值