leetcode144_145_94_二叉树的遍历(iteration版)
之前介绍了二叉树三种遍历方式的recursion版本,现在使用iteration版本。
模板中最重要的就是:1.只有不是null的节点才能入栈2.如果null入栈了,说明它的栈下一个节点还没有处理过(加入结果集)
https://programmercarl.com/二叉树的统一迭代法.html#迭代法中序遍历
模板
public List<Integer> inorderTraversal(TreeNode root) {
List<Integer> list = new ArrayList<Integer>();
Stack<TreeNode> stack = new Stack();
if(root == null) return list;
else stack.push(root);
while(!stack.isEmpty()) {
TreeNode node = stack.pop();
if(node != null) {
// 根据需要的序列将节点入栈,其中:1.只有非空节点才能入栈2.如果空节点入栈了,那是为了提示还没有加入结果集合。
}
else {
TreeNode treeNode = stack.pop();
list.add(treeNode.val);
}
}
return list;
}
leetcode144 二叉树前序遍历
public List<Integer> preorderTraversal(TreeNode root) {
List<Integer> list = new ArrayList<Integer>();
Stack<TreeNode> stack = new Stack();
if(root == null) return list;
else stack.push(root);
while(!stack.isEmpty()) {
TreeNode node = stack.pop();
if(node != null) {
if(node.right != null) stack.push(node.right);
if(node.left != null) stack.push(node.left);
stack.push(node);
stack.push(null);
}
else {
list.add(stack.pop().val);
}
}
return list;
}
leetcode145 二叉树后序遍历
public List<Integer> postorderTraversal(TreeNode root) {
List<Integer> list = new ArrayList<Integer>();
Stack<TreeNode> stack = new Stack<TreeNode>();
if(root != null) stack.push(root);
else return list;
while(!stack.isEmpty()) {
TreeNode treeNode = stack.pop();
if(treeNode != null) {
// l r m
stack.push(treeNode);
stack.push(null);
if(treeNode.right != null) stack.push(treeNode.right);
if(treeNode.left != null) stack.push(treeNode.left);
}
else {
TreeNode node = stack.pop();
list.add(node.val);
}
}
return list;
}
leetcode94 二叉树中序遍历
public List<Integer> inorderTraversal(TreeNode root) {
List<Integer> list = new ArrayList<Integer>();
Stack<TreeNode> stack = new Stack();
if(root == null) return list;
else stack.push(root);
while(!stack.isEmpty()) {
TreeNode node = stack.pop();
if(node != null) {
if(node.right != null) stack.push(node.right);
stack.push(node);
stack.push(null);
if(node.left != null) stack.push(node.left);
}
else {
TreeNode treeNode = stack.pop();
list.add(treeNode.val);
}
}
return list;
}

浙公网安备 33010602011771号