LeetCode: Binary Tree Zigzag Level Order Traversal

出错了一次,改了一次,小失误没用弄好zigzag的排序。题目还是简单的

 1 /**

 2  * Definition for binary tree

 3  * struct TreeNode {

 4  *     int val;

 5  *     TreeNode *left;

 6  *     TreeNode *right;

 7  *     TreeNode(int x) : val(x), left(NULL), right(NULL) {}

 8  * };

 9  */

10 class Solution {

11 public:

12     void dfs(vector<vector<int>> &ret, stack<TreeNode*> &S, int num) {

13         stack<TreeNode*> T;

14         vector<int> level;

15         while (!S.empty()) {

16             TreeNode *tmp = S.top();

17             level.push_back(tmp->val);

18             if (num%2) {

19                 if (tmp->left) T.push(tmp->left);

20                 if (tmp->right) T.push(tmp->right);

21             }

22             else {

23                 if (tmp->right) T.push(tmp->right);

24                 if (tmp->left) T.push(tmp->left);

25             }

26             S.pop();

27         }

28         ret.push_back(level);

29         if (!T.empty()) {

30             S = T;

31             dfs(ret, S, num+1);

32         }

33     }

34     vector<vector<int> > zigzagLevelOrder(TreeNode *root) {

35         // Start typing your C/C++ solution below

36         // DO NOT write int main() function

37         vector<vector<int>> ret;

38         if (!root) return ret;

39         stack<TreeNode*> S;

40         S.push(root);

41         dfs(ret, S, 1);

42         return ret;

43     }

44 };

 C#:

 1 /**

 2  * Definition for a binary tree node.

 3  * public class TreeNode {

 4  *     public int val;

 5  *     public TreeNode left;

 6  *     public TreeNode right;

 7  *     public TreeNode(int x) { val = x; }

 8  * }

 9  */

10 public class Solution {

11     public List<List<int>> ZigzagLevelOrder(TreeNode root) {

12         Stack<TreeNode> left = new Stack<TreeNode>();

13         Stack<TreeNode> right = new Stack<TreeNode>();

14         List<List<int>> ans = new List<List<int>>();

15         if (root == null) return ans;

16         left.Push(root);

17         while (left.Count != 0 || right.Count != 0)

18         {

19             List<int> tmp = new List<int>();

20             if (left.Count != 0) {

21                 while (left.Count != 0) {

22                     TreeNode p = left.Peek();

23                     left.Pop();

24                     tmp.Add(p.val);

25                     if (p.left != null) right.Push(p.left);

26                     if (p.right != null) right.Push(p.right);

27                 }

28             }

29             else {

30                 while (right.Count != 0) {

31                     TreeNode p = right.Peek();

32                     right.Pop();

33                     tmp.Add(p.val);

34                     if (p.right != null) left.Push(p.right);

35                     if (p.left != null) left.Push(p.left);

36                 }

37             }

38             ans.Add(tmp);

39         }

40         return ans;

41     }

42 }
View Code

 

你可能感兴趣的:(LeetCode)