【演算法】棧在java中,你真的瞭解嗎?
阿新 • • 發佈:2021-01-09
技術標籤:演算法
什麼是棧?
1、棧是一種先進先出的線性結構
2、只能從棧頂插入或者刪除。
jdk中棧的資料結構
提供了入棧的push操作,和出棧的pop操作。有資料結構有:
1、執行緒安全的Stack
2、LinkedList
應用:
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 { LinkedList<TreeNode> stack = new LinkedList<>(); List<Integer> returnList = new ArrayList<>(); while (!stack.isEmpty() || root != null) { if (root != null) { stack.push(root); root = root.left; continue; } root = stack.pop(); returnList.add(root.val); root = root.right ; } return returnList; }
class Solution { public List<Integer> preorderTraversal(TreeNode root) { List<Integer> returnList = new ArrayList<>(); LinkedList<TreeNode> stack = new LinkedList<>(); while (!stack.isEmpty() || root != null) { if (root != null) { returnList.add(root.val); stack.push(root); root = root.left; continue; } root = stack.pop().right; } return returnList; } }
public List<Integer> postorderTraversal(TreeNode root) { LinkedList<TreeNode> stack = new LinkedList<>(); List<Integer> returnList = new ArrayList<>(); TreeNode prev = null; while (!stack.isEmpty() || root != null) { while (root != null) { stack.push(root); root = root.left; } root = stack.pop(); if (root.right == null || root.right == prev) { returnList.add(root.val); prev = root; root = null; } else { stack.push(root); root = root.right; } } return returnList; }