N 叉树的前序遍历

N 叉树的前序遍历给定一个N叉树,返回其节点值的前序遍历 。N叉树在输入中按层序遍历进行序列化表示,每组子节点由空值 null 分隔(请参见示例)。示例1输入:root=[1,null,3,2,4,null,5,6]输出:[1,3,5,6,2,4]示例2:输入:ro

大家好,欢迎来到IT知识分享网。

给定一个 N 叉树,返回其节点值的前序遍历 。

N 叉树 在输入中按层序遍历进行序列化表示,每组子节点由空值 null 分隔(请参见示例)。

示例1

N 叉树的前序遍历

 

 

 

输入:root = [1,null,3,2,4,null,5,6]
输出:[1,3,5,6,2,4]
示例2:

N 叉树的前序遍历

 

 

 

输入:root = [1,null,2,3,4,5,null,null,6,7,null,8,null,9,10,null,null,11,null,12,null,13,null,null,14]
输出:[1,2,3,6,7,11,14,4,8,12,5,9,13,10]

对于二叉树遍历问题我们用最简单,最暴力的方法就是递归,如果只是AC的话,递归完全可以,如果面试的话,面试官可能会让你写出非递归遍历,接下来会分别介绍这两种方法,

递归思路:对于二叉树来说,前序遍历就是先输出根节点,再输出左节点,再输出右节点,根据这个思路我们可以写出对于N叉树的前序遍历方法

1、先输出根节点

2、遍历根节点的孩子节点,

3、重复步骤1

    public List<Integer> preorder(Node root) { List<Integer> result = new ArrayList<>(); if(root == null) return result; digui(root,result); return result; } public void digui(Node root,List<Integer> result){ if(root == null) return; result.add(root.val); List<Node> list = root.children; for(int i = 0;i<list.size();i++){ digui(list.get(i),result); } } 

非递归:同样的先想哈二叉树非递归的思路,它需要结合栈来实现,我们都知道栈是先进后出的结构,而前序遍历的顺序是根节点,左孩子,右孩子,那么入栈顺序就是将根节点的左右孩子按右孩子、左孩子的顺序入栈,最后再出栈就是前序遍历的结果。根据这个思路我们可以写出对于N叉树前序遍历的非递归方法

首先将根节点入栈

1,判断栈是否为空,不为空就出栈

2、再将他的孩子节点从右节点到左节点入栈

3、重复1

    public List<Integer> preorder(Node root) {
        List<Integer> result = new ArrayList<Integer>(); Stack<Node> stack = new Stack<Node>(); if(root == null) return result; stack.push(root); while(!stack.isEmpty()) { Node node = stack.pop(); result.add (node.val);
       //逆序 Collections.reverse(node.children);
for(Node tmp : node.children) { stack.add(tmp); } } return result; }

 

免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://yundeesoft.com/31979.html

(0)

相关推荐

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注

关注微信