剑指Offer(九)二叉树打印系列-之字形打印二叉树

题目:

请实现一个函数按照之字形打印二叉树,即第一行按照从左到右的顺序打印,第二层按照从右至左的顺序打印,第三行按照从左到右的顺序打印,其他行以此类推。

思路:

同样我们需要找到合适的数据容器来使得打印的顺序可以较好地实现。

程序代码:

vector<vector<int> > PrintZhi(TreeNode* pRoot) {
    stack<TreeNode*> s[2];
    int current=0;
    int next=1;
    vector<vector<int> > r;
    vector<int> rr;
    if(!pRoot)
        return r;
    s[current].push(pRoot);
    while(s[current].size() || s[next].size())
    {
        TreeNode* node=s[current].top();
        rr.push_back(node->val);
        cout<<node->val<<" ";
        s[current].pop();
        if(current==0)
        {
            if(node->left)
                s[next].push(node->left);
            if(node->right)
                s[next].push(node->right);
        }
        if(current==1)
        {
            if(node->right)
                s[next].push(node->right);
            if(node->left)
                s[next].push(node->left);
        }
        if(s[current].empty())
        {
            cout<<endl;
            current=1-current;
            next=1-next;
            r.push_back(rr);
            vector<int>().swap(rr);
        }

    }
    return r;
    }

运行结果:


猜你喜欢

转载自blog.csdn.net/bubbler_726/article/details/80972571
今日推荐