589. N 叉树的前序遍历

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/n-ary-tree-preorder-traversal
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
多叉树和二叉树的思路是一样的。都是缓存后遍历的。
public List<Integer> preorder(Node root) {
List<Integer> ret = new ArrayList<>();
Stack<Node> stack = new Stack<>();
Node cur = root;
while(cur != null || !stack.isEmpty()) {
if(cur != null) {
stack.push(cur);
}
cur = stack.pop();
ret.add(cur.val);
List<Node> nodes = cur.children;
for(int i=nodes.size()-1;i>0;i--) {
stack.push(nodes.get(i));
}
cur = nodes.size() == 0 ? null : nodes.get(0);
}
return ret;
}
当然如果这样不好理解,还可以先将根节点入栈,之后从后向前一次入栈:
public List<Integer> preorder(Node root) {
if(root == null) {
return new ArrayList<>();
}
List<Integer> ret = new ArrayList<>();
Deque<Node> stack = new ArrayDeque<>();
Node cur = root;
stack.push(cur);
while(!stack.isEmpty()) {
cur = stack.pop();
ret.add(cur.val);
// 孩子节点从右至左依次入栈
for(int i=cur.children.size()-1;i>=0;i--) {
stack.push(cur.children.get(i));
}
}
return ret;
}
浙公网安备 33010602011771号