之字形打印二叉树

来源:互联网 发布:美团大数据招聘 编辑:程序博客网 时间:2024/05/20 15:12

将一棵二叉树按“之”字型打印是什么意思呢?如下图所示的二叉树,遍历之后打印结果如右图,即为二叉树的之字型打印。
这里写图片描述
分析题意:当打印奇数行时,按照从左到右的顺序打印,当打印偶数行时,要按照从右往左相反的方向打印,这样的结构很自然想到用栈来实现,但我们需要创建两个栈,来区分偶数行和奇数行的情况。当为奇数行时,需要从右到左入栈,从左到右出栈,偶数行相反。
代码实现:

//之字形遍历    void Print()    {        _Print(_root);    }    void _Print(Node* root)    {        if (root == NULL)            return;        stack<Node*> s[2];//两个栈        int cur = 0;        int next = 1;        s[cur].push(root);        while (!s[0].empty() || !s[1].empty())        {            Node* pNode = s[cur].top();            s[cur].pop();            cout << pNode->_data << " ";            if (cur == 0)//当前是偶数层,下一层是奇数层            {                if (pNode->_left != NULL)                    s[next].push(pNode->_left);                if (pNode->_right != NULL)                    s[next].push(pNode->_right);            }            else//下一层是偶数层            {                if (pNode->_right)                    s[next].push(pNode->_right);                if (pNode->_left)                    s[next].push(pNode->_left);            }            if (s[cur].empty())//交换            {                cout << endl;                cur = 1 - cur;                next = 1 - next;            }        }    }

这里写图片描述

原创粉丝点击