二叉树的深度优先遍历
结合代码随想录和力扣大佬部分解析programmercarl.com/%E4%BA%8C%E… programmercarl.com/%E4%BA%8C%E… leetcode.cn/problems/bi…
- 递归
class Solution {
public List<Integer> preorderTraversal(TreeNode root) {
List<Integer> res= new ArrayList<Integer>();
preorder(root,res);
return res;
- }
public void preorder(TreeNode root,List<Integer> res){
if(root==null){
return;
}
res.add(root.val);
preorder(root.left,res);
preorder(root.right,res);
}
}
- 迭代
class Solution {
public List<Integer> preorderTraversal(TreeNode root) {
List<Integer> res = new ArrayList<Integer>();
if(root == null){
return res;
}
Stack<TreeNode> stack = new Stack<TreeNode>();
stack.push(root);//入栈顺序:中-右-左 出栈顺序:中-左-右
while(!stack.isEmpty()){
TreeNode node=stack.pop();
res.add(node.val);
if (node.right != null){
stack.push(node.right);
}
if (node.left != null){
stack.push(node.left);
}
}
return res;
}
}
- 递归
class Solution {
public List<Integer> inorderTraversal(TreeNode root) {
List<Integer> res= new ArrayList<Integer> ();
inorder(root,res);
return res;
}
public void inorder(TreeNode root,List<Integer> res){
if(root==null){
return;
}
inorder(root.left,res);
res.add(root.val);
inorder(root.right,res);
}
}
- 迭代
class Solution {
public List<Integer> inorderTraversal(TreeNode root) {
List<Integer> res = new ArrayList<Integer>();
if(root == null){
return res;
}
Stack<TreeNode> stack = new Stack<TreeNode>();
TreeNode cur = root;
while(!stack.isEmpty()||cur!=null){
while(cur!=null){
stack.push(cur);
cur=cur.left;
}
TreeNode node=stack.pop();
res.add(node.val);
if (node.right != null){
cur = node.right;
}
}
return res;
}
}
- 递归
class Solution {
public List<Integer> postorderTraversal(TreeNode root) {
List<Integer> res= new ArrayList<Integer> ();
postorder(root,res);
return res;
}
public void postorder(TreeNode root,List<Integer> res){
if(root==null){
return;
}
postorder(root.left,res);
postorder(root.right,res);
res.add(root.val);
}
}
- 迭代
public List<Integer> postorderTraversal(TreeNode root) {
List<Integer> res = new ArrayList<Integer>();
if(root == null){
return res;
}
Stack<TreeNode> stack = new Stack<TreeNode>();
stack.push(root);//入栈顺序:中-左-右 出栈顺序:中-右-左, 最后翻转结果
while(!stack.isEmpty()){
TreeNode node=stack.pop();
res.add(node.val);
if (node.left != null){
stack.push(node.left);
}
if (node.right != null){
stack.push(node.right);
}
}
Collections.reverse(res);
return res;
}
}