Leetcode NO.103 Binary Tree Zigzag Level Order Traversal

来源:互联网 发布:淘宝哪家女装店好 编辑:程序博客网 时间:2024/05/21 09:48

本题题目要求如下:

Given a binary tree, return the zigzag level order traversal of its nodes' values. (ie, from left to right, then right to left for the next level and alternate between).

For example:
Given binary tree {3,9,20,#,#,15,7},

    3   / \  9  20    /  \   15   7

return its zigzag level order traversal as:

[  [3],  [20,9],  [15,7]]
本题是我少数几个可以一次AC的题。。。主要是因为同类型的题做的太多了。其实就是用recursive DFS,只不过dfs函数里面要有一个argument记录层数,然后根据层数插入就行了,代码也很简单,如下所示:

/** * Definition for binary tree * struct TreeNode { *     int val; *     TreeNode *left; *     TreeNode *right; *     TreeNode(int x) : val(x), left(NULL), right(NULL) {} * }; */class Solution {public:    vector<vector<int> > zigzagLevelOrder(TreeNode *root) {    dfs(root, 0);        return ret;    }private:vector<vector<int>> ret;void dfs(TreeNode* root, int level) {if (root == nullptr)return;else {if (level == ret.size()) {vector<int> tmp;ret.push_back(tmp);}if (level%2) {ret[level].insert(ret[level].begin(), root->val);}else {ret[level].push_back(root->val);}dfs(root->left, level + 1);dfs(root->right, level + 1);}}};


0 0