力扣算法学习day09-1
二叉树的遍历 迭代法—统一逻辑版本(题目略,补充昨日)
144-二叉树的前序遍历
public List<Integer> preorderTraversal(TreeNode root) {
LinkedList<TreeNode> stack = new LinkedList<>();
ArrayList<Integer> result = new ArrayList<>();
if(root == null){
return result;
}
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{
node = stack.pop();
result.add(node.val);
}
}
return result;
}
94-二叉树的中序遍历
public List<Integer> inorderTraversal(TreeNode root) {
LinkedList<TreeNode> stack = new LinkedList<>();
ArrayList<Integer> result = new ArrayList<>();
if(root == null){
return result;
}
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{
node = stack.pop();
result.add(node.val);
}
}
return result;
}
145-二叉树的后序遍历
public List<Integer> postorderTraversal(TreeNode root) {
LinkedList<TreeNode> stack = new LinkedList<>();
ArrayList<Integer> result = new ArrayList<>();
if(root == null){
return result;
}
stack.push(root);
while(!stack.isEmpty()){
TreeNode node = stack.pop();
if(node != null){
stack.push(node);
stack.push(null);
if(node.right != null){
stack.push(node.right);
}
if(node.left != null){
stack.push(node.left);
}
} else{
node = stack.pop();
result.add(node.val);
}
}
return result;
}
已复习 59-螺旋矩阵