什么是栈?
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;
}