《算法通关村—迭代实现二叉树的前序遍历》

编程入门 行业动态 更新时间:2024-10-19 04:21:27

《算法通关村—迭代实现二叉树的前序<a href=https://www.elefans.com/category/jswz/34/1771029.html style=遍历》"/>

《算法通关村—迭代实现二叉树的前序遍历》

《算法通关村—迭代实现二叉树的前序遍历》

利用递归进行二叉树的前序遍历是非常容易的几行代码就能解决。但是你知道如何用迭代实现吗?

理论上来说能够用递归解决的都能用迭代解决,我们就来试试用迭代解决二叉树的前序遍历问题吧。

什么是前序遍历,比如一颗二叉树如下图:

这个二叉树经过前序遍历得到的结果就是1、3、5、2 .

对应leetcode的·144题大家可以去看看

我们用递归进行实现(下面代码中会出现关于TreeNode的定义):

public List<Integer> preorderTraversal(TreeNode root){List<Integer> res = new ArrayList<Integer>();if(root == null){return res;}preOrder(root,res);return res;
}
public void preOrder(TreeNode node ,List<Integer> res){if(node == null){return ;}res.add(node.val);preOrder(node.left,res);preOrder(node.right,res);
}

如果利用迭代实现:

/*** Definition for a binary tree node.* public class TreeNode {*     int val;*     TreeNode left;*     TreeNode right;*     TreeNode() {}*     TreeNode(int val) { this.val = val; }*     TreeNode(int val, TreeNode left, TreeNode right) {*         this.val = val;*         this.left = left;*         this.right = right;*     }* }*/
class Solution {public List<Integer> preorderTraversal(TreeNode root) {List<Integer> res = new ArrayList<Integer>();if(root == null){return res;}Deque<TreeNode> stack = new LinkedList<TreeNode>();TreeNode node = root;while(!stack.isEmpty() || node!=null){while(node != null) {res.add(node.val);stack.push(node);node = node.left;}node = stack.pop();node = node.right;}return res;}}
理解迭代遍历代码:

首先进入的是root节点,先把1放入结果列表中,并且把1放入栈

通过中间的while循环来到node.val=3的节点,继续把3放入结果列表,并放入栈中。

这是在中层的while循环第一次退出。

退出后,node又等于了栈中的node并且出栈,然后令node = node.right然后进行下一次,

进行同样的操作,后面看图理解就好

点击链接:我正在「编程导航」和朋友们讨论有趣的话题,你⼀起来吧?

也可以加我QQ(2837468248)咨询说明来意!

更多推荐

《算法通关村—迭代实现二叉树的前序遍历》

本文发布于:2023-11-16 12:57:01,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1622702.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:遍历   算法   迭代   二叉树

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!