按之字形顺序打印二叉树

来源:互联网 发布:java.io.temp 编辑:程序博客网 时间:2024/06/02 02:22

题目:

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

分析:
使用两个栈。

struct TreeNode{    int val;    struct TreeNode *left;    struct TreeNode *right;    TreeNode( int x ) :        val( x ), left( NULL ), right( NULL ) {}};class Solution{public:    vector<vector<int> > printBinaryTreeAsZhi( TreeNode* pRoot )    {        if ( pRoot == NULL )            return vector<vector<int> >();        int current = 0;        int next = 1;        vector<vector<int> > result;        vector<int> temp;        stack<TreeNode*> treeStack[2];        treeStack[current].push( pRoot );        while ( !treeStack[0].empty() || !treeStack[1].empty() )        {            TreeNode* pNode = treeStack[current].top();            treeStack[current].pop();            temp.push_back( pNode->val );            if ( current == 0 )            {                if ( pNode->left != NULL )                {                    treeStack[next].push( pNode->left );                }                if ( pNode->right != NULL )                {                    treeStack[next].push( pNode->right );                }            }            else            {                if ( pNode->right != NULL )                {                    treeStack[next].push( pNode->right );                }                if ( pNode->left != NULL )                {                    treeStack[next].push( pNode->left );                }            }            if ( treeStack[current].empty() )            {                result.push_back( temp );                temp.clear();                current = 1 - current;                next = 1 - next;            }        }        return result;    }};
原创粉丝点击