一、前言。
整理了一下N叉树的遍历算法。当然,递归算法简单易懂,是树遍历的首选。但是,试着用迭代去实现,是一种思维的开拓。也学到了栈和队列的一些应用。
这里用LeetCode上的题目作为例子,用Java实现。语言和遍历内容不是重点,可以根据需要灵活变化,重要的是其中的一些整体思路和条件判断。
简单起见:树的节点实现如下,
class Node {
public int val;
public List<Node> children;
public Node() {}
public Node(int _val,List<Node> _children) {
val = _val;
children = _children;
}
}
二、先序遍历

1. 思路:
前序遍历的特点是 根->左->右(左右指子节点顺序),因为当进入左子树之后,我们没有办法回到根,所以必须记录我们的访问路径。这是一种回溯的思想。当某个子树访问完之后,我们回溯到其父节点进入其兄弟子树。回溯经常是由栈实现的。每次遇到一个节点,先访问,再处理其子节点。子节点的访问顺序是从左到右,所以必须从右到左进栈。整理一下,我们便可以得到解法:
(1)根节点进栈。
(2)弹出栈顶元素,对其进行操作。再对其子节点从右到左进栈,直到栈为空,遍历结束。
2.实现:
class Solution {
//迭代版
public List<Integer> preorder(Node root){
List<Integer> list =new ArrayList<>();
if(root==null)
return list;
Stack<Node> stack=new Stack<>();
stack.push(root);
while(!stack

本文详细介绍了如何使用迭代方法实现N叉树的先序、后序和层次遍历。通过LeetCode上的题目举例,采用Java语言进行实现。文中强调了在不同遍历方式中栈和队列的应用,以及访问节点的关键时机。
最低0.47元/天 解锁文章
1425

被折叠的 条评论
为什么被折叠?



