力扣 title589:N叉树的前序遍历
给定一个 n 叉树的根节点 root
,返回 其节点值的 前序遍历 。
n 叉树 在输入中按层序遍历进行序列化表示,每组子节点由空值 null
分隔(请参见示例)。
思路:
1.初始化时,使用列表存储子节点。
2. 遍历时,使用栈存储节点,比如根节点的子节点,按照4,2,3的顺序入栈,则出栈时为3,2,4。值为③的节点,需要让6,5依次入栈,则出栈时是5,6。
import java.util.ArrayList;
import java.util.List;
import java.util.Stack;public class TreeDemo {public static void main(String[] args) {Node root=createTree();List<Integer> result=preorder(root);System.out.println(result);}//创建N叉树public static Node createTree(){Node root=new Node(1); //创建根节点Node node2=new Node(3);Node node3=new Node(2);Node node4=new Node(4);List<Node> list1=new ArrayList<>();list1.add(node2);list1.add(node3);list1.add(node4);root.children=list1;Node node5=new Node(5);Node node6=new Node(6);List<Node> list2=new ArrayList<>();list2.add(node5);list2.add(node6);node2.children=list2;return root;}//前序遍历N叉树public static List<Integer> preorder(Node root) {List<Integer> result=new ArrayList<>();Stack<Node> stack=new Stack();if(root!=null){stack.push(root);}while (!stack.empty()){Node node=stack.pop();result.add(node.val);//node.children是一个节点列表,里面存储了节点的子节点while (node.children!=null){int index=node.children.size();index--;if(index<0) break; //防止角标溢出//利用index--,使得节点倒序入栈stack.push(node.children.get(index));node.children.remove(index);}}return result;}
}