589_N叉树的前序遍历

589_N叉树的前序遍历

package 二叉树.BT;

import java.util.ArrayList;
import java.util.Collections;
import java.util.Deque;
import java.util.LinkedList;
import java.util.List;
/**
 * https://leetcode-cn.com/problems/n-ary-tree-preorder-traversal/
 * @author Huangyujun
 *
 */
public class _589_N叉树的前序遍历 {
    public class Node {
        public int val;
        public List<Node> children;

        public Node() {
        }

        public Node(int _val) {
            val = _val;
        }

        public Node(int _val, List<Node> _children) {
            val = _val;
            children = _children;
        }
    }
    //递归实现
    List<Integer> list1 = new ArrayList<Integer>();
    public List<Integer> preorder1(Node root) {
        if(root == null)    return list1;
        //先拿到当前结点
        list1.add(root.val);
        for(Node node: root.children) {
            preorder1(node);
        }
        return list1;
    }
    
    //要求迭代实现
    //利用到了栈的特点跟集合倒序(拿到最后一层的孩子树结点)
      public List<Integer> preorder(Node root) {
            LinkedList<Integer> output = new LinkedList<>();
            if (root == null) {
                return output;
            }

            LinkedList<Node> stack = new LinkedList<>();
            stack.add(root);
            while (!stack.isEmpty()) {
                Node node = stack.pop();
                output.add(node.val);
                //前序(假设是二叉树时:左边先(左左左到最后一个孩子(所以逆序一下孩子的顺序啊)))
                Collections.reverse(node.children);
                for (Node item : node.children) {
                    stack.push(item);
                }
            }
            return output;
        }    
}

本文来自博客园,作者:一乐乐,转载请注明原文链接:https://www.cnblogs.com/shan333/p/15709256.html

原文地址:https://www.cnblogs.com/shan333/p/15709256.html