N叉树的遍历
刷题刷到了就记录,毕竟用的少不熟悉(迭代写法)。
节点定义:
class Node { public: int val; vector<Node *> children; Node() {} Node(int _val) { val = _val; } Node(int _val, vector<Node *> _children) { val = _val; children = _children; } };
前序遍历:
class Solution { public: vector<int> preorder(Node *root) { stack<Node *> q; Node *n; vector<int> ans; q.push(root); while (q.size() && q.top() != nullptr) { n = q.top(); q.pop(); ans.emplace_back(n->val); for (int i = n->children.size() - 1; i >= 0; --i) q.push(n->children[i]); } return ans; } };
注意一点是,
将栈换成队列,然后子节点逆序遍历放入,就变成了层序遍历(迭代)
后续遍历也是如同二叉树一样借助pre节点处理。
stack<Node *> st; Node *n, *pre = nullptr; vector<int> ans; st.push(root); while (st.size() && st.top() != nullptr) { n = st.top(); if (n->children.size() ^ 0 && pre != n->children[n->children.size() - 1]) for (int i = n->children.size() - 1; i >= 0; i--) st.push(n->children[i]); else ans.emplace_back(n->val), pre = st.top(), st.pop(); } return ans;
话说,N叉树遍历应该是没有中序遍历的吧?
【Over】

浙公网安备 33010602011771号