树的几种遍历方式(递归/非递归)

 2023-09-15 阅读 22 评论 0

摘要:树的几种遍历方式,前序遍历,中序遍历,后序遍历,包括它的递归实现以及非递归实现 非递归遍历 -----------------前序遍历------------------------ class Solution {public List<Integer> preorderTraversal(TreeNode root) {List<Intege

树的几种遍历方式,前序遍历,中序遍历,后序遍历,包括它的递归实现以及非递归实现

非递归遍历

-----------------前序遍历------------------------
class Solution {public List<Integer> preorderTraversal(TreeNode root) {List<Integer> res = new ArrayList<>();if(root == null) return res;Stack<TreeNode> stack = new Stack<>();stack.push(root);while(!stack.isEmpty()){TreeNode node = stack.pop();res.add(node.val);if(node.right != null) stack.push(node.right);if(node.left != null) stack.push(node.left);}return res;}
}-----------后序遍历-----------------------------class Solution {public List<Integer> postorderTraversal(TreeNode root) {List<Integer> res = new ArrayList<>();if(root == null) return res;Deque<TreeNode> deque = new LinkedList<>();deque.push(root);while(!deque.isEmpty()){TreeNode node = deque.pop();res.add(node.val);if(node.left != null) deque.push(node.left);if(node.right != null) deque.push(node.right);}Collections.reverse(res);return res;}
}

另一种方法

在这里插入图片描述

class Solution {public List<Integer> postorderTraversal(TreeNode root) {List<Integer> res = new ArrayList<Integer>();if (root == null) {return res;}Deque<TreeNode> stack = new LinkedList<TreeNode>();TreeNode prev = null;while (root != null || !stack.isEmpty()) {while (root != null) {stack.push(root);root = root.left;}root = stack.pop();if (root.right == null || root.right == prev) {res.add(root.val);prev = root;root = null;} else {stack.push(root);root = root.right;}}return res;}
}

前序非递归:

public List<Integer> preTravel(TreeNode root){List<Integer> res = new ArrayList<>();if(root == null) return res;Stack<TreeNode> stack = new Stack<>();while(!stack.isEmpty() || root != null){while(root != null){res.add(root.val);stack.push(root);root = root.left;}if(!stack.isEmpty()){root = stack.pop();root = root.right;}}return res;}

中序非递归:

public List<Integer> midTravel(TreeNode root){List<Integer> res = new ArrayList<>();if(root == null) return res;Stack<TreeNode> stack = new Stack<>();while(!stack.isEmpty() || root != null){while(root != null){stack.push(root);root = root.left;}if(!stack.isEmpty()){root = stack.pop();res.add(root.val);root = root.right;}}return res;}

版权声明:本站所有资料均为网友推荐收集整理而来,仅供学习和研究交流使用。

原文链接:https://hbdhgg.com/5/62110.html

发表评论:

本站为非赢利网站,部分文章来源或改编自互联网及其他公众平台,主要目的在于分享信息,版权归原作者所有,内容仅供读者参考,如有侵权请联系我们删除!

Copyright © 2022 匯編語言學習筆記 Inc. 保留所有权利。

底部版权信息