题解 | #按之字形顺序打印二叉树#

按之字形顺序打印二叉树

https://www.nowcoder.com/practice/91b69814117f4e8097390d107d2efbe0

/*
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> > Print(TreeNode* pRoot) {
        vector<vector<int>> result; // 创建返回结果的二维数组
        deque<TreeNode*> deq;   // 创建双向队列,保存每层节点
        if(pRoot) deq.push_back(pRoot);     // 如果根节点不为空,将根节点放入队列中
        int flag = 1;   // 标记遍历每层节点的顺序,单数为从前向后,双数为从后向前
        while(!deq.empty()){    // 队列不为空,进入循环
            vector<int> temp_vec;   // 创建临时数组,保存每层节点值
            int size = deq.size();  // 先确定每层循环的次数
            if(flag % 2){   // 如果标记值为单数,则从前向后遍历队列
                for(int i = 0; i < size; ++i){
                    TreeNode* cur = deq.front();    // 队头节点赋给临时节点
                    temp_vec.push_back(cur->val);   // 将临时节点的值加入临时数组中
                    deq.pop_front();    // 删除队头节点
                    if(cur->left) deq.push_back(cur->left);   // 如果临时节点的左孩子不为空,将左孩子加入队列中
                    if(cur->right) deq.push_back(cur->right);   // 如果临时节点的右孩子不为空,将右孩子加入队列中
                }
            }
            else{   // 如果标记值为双数,则从后向前遍历队列
                vector<TreeNode*> temp_node;	// 创建节点数组,保存当前队列中的节点
                for(int i = 0; i < size; ++i){	// 将队列中的节点放入节点数组中
                    temp_node.push_back(deq.front());
                    deq.pop_front();
                }
                for(int i = temp_node.size() - 1; i >= 0; --i){	// 倒叙遍历节点数组,节点值放入临时数组
                    temp_vec.push_back(temp_node[i]->val);
                }
                for(int i = 0; i < temp_node.size(); ++i){	// 将节点数组的左右孩子放入队列中
                    if(temp_node[i]->left) deq.push_back(temp_node[i]->left);
                    if(temp_node[i]->right) deq.push_back(temp_node[i]->right);
                }
            }
            result.push_back(temp_vec);	// 将临时数组加入到结果数组中
            ++flag;	// 每次循环结束之后标记+1
        }
        return result;
    }
};

全部评论

相关推荐

05-03 12:45
西南大学 Java
nsnzkv:你这项目写的内容太多了,说实话都是在给自己挖坑,就算简历过了,后面面试也难受
点赞 评论 收藏
分享
04-18 15:58
已编辑
门头沟学院 设计
kaoyu:这一看就不是计算机的,怎么还有个排斥洗碗?
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务