todo:实现Morris遍历
思路1:栈式DFS
- 维护两个结构
sequence_preorder
和stack_nodes
,在弹栈的时候插入序列 - 后入栈的先弹栈,那么后入栈的先插入序列,所以左边的后入栈,右边的先入栈。
- 需要脑子里面有入栈弹栈的整个流程。结合代码适当记忆。
代码1:
/*
// Definition for a Node.
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*> stack_nodes;
vector<int> sequence_preorder;
if (root == nullptr) {
return sequence_preorder;
}
stack_nodes.push(root);
while (!stack_nodes.empty()) {
Node* node_cur = stack_nodes.top();
stack_nodes.pop();
sequence_preorder.push_back(node_cur->val);
for (int i = node_cur->children.size() - 1; i >= 0; --i) {
stack_nodes.push(node_cur->children[i]);
}
}
return sequence_preorder;
}
};