103. Binary Tree Zigzag Level Order Traversal

    xiaoxiao2025-06-13  13

    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,null,null,15,7],

    3 / \ 9 20 / \ 15 7

    return its zigzag level order traversal as:

    [ [3], [20,9], [15,7] ]

    题意:

    返回二叉树的“之”字形遍历结果

    思路:

    和普通的层次遍历思路类似,区别在于处理时需要维护两个栈,相邻两行分别存到两个栈中,进栈的顺序也不相同,一个栈是先进左子结点然后右子节点,另一个栈是先进右子节点然后左子结点,这样出栈的顺序就是我们想要的之字形了。记住后进栈的出站时先被处理:

    /** * 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) { vector<vector<int> >res; if (!root) return res; stack<TreeNode*> s1; stack<TreeNode*> s2; s1.push(root); vector<int> out; while (!s1.empty() || !s2.empty()) { while (!s1.empty()) { TreeNode *cur = s1.top(); s1.pop(); out.push_back(cur->val); if (cur->left) s2.push(cur->left); if (cur->right) s2.push(cur->right); } if (!out.empty()) res.push_back(out); out.clear(); while (!s2.empty()) { TreeNode *cur = s2.top(); s2.pop(); out.push_back(cur->val); if (cur->right) s1.push(cur->right); if (cur->left) s1.push(cur->left); } if (!out.empty()) res.push_back(out); out.clear(); } return res; } };
    转载请注明原文地址: https://ju.6miu.com/read-1299920.html
    最新回复(0)