记录LeetCode刷题,可能有待改进
前序非递归
public List<Integer> preorderTraversal(TreeNode root) {
List<Integer> list = new ArrayList<>();
if (root == null) return list;
Stack<TreeNode> stack = new Stack<>();
stack.push(root);
TreeNode pointer;
while (!stack.empty()) {
pointer = stack.pop();
if (pointer != null) {
stack.add(pointer.right);
stack.add(pointer.left);
list.add(pointer.val);
}
}
return list;
}
中序非递归
public List<Integer> inorderTraversal(TreeNode root) {
List<Integer> list = new ArrayList<>();
if (root == null) return list;
Stack<TreeNode> stack = new Stack<>();
stack.push(root);
TreeNode pointer;
while (!stack.empty()) {
pointer = stack.pop();
if (pointer != null) {
stack.push(pointer.right);
stack.push(pointer);
stack.push(pointer.left);
}
if (pointer == null && !stack.empty()) {
pointer = stack.pop();
list.add(pointer.val);
}
}
return list;
}
后序非递归
public List<Integer> postorderTraversal(TreeNode root) {
List<Integer> list = new ArrayList<>();
if (root == null) return list;
Stack<TreeNode> stack = new Stack<>();
Set<TreeNode> set = new HashSet<>();
stack.push(root);
TreeNode pointer;
while (!stack.empty()) {
pointer = stack.pop();
if (pointer != null) {
if (!set.contains(pointer)) {
set.add(pointer);
stack.push(pointer);
stack.push(pointer.right);
stack.push(pointer.left);
}else {
list.add(pointer.val);
}
}
}
return list;
}