前序遍历
public class Solution
{
public ArrayList<Integer> preorderTraversal(TreeNode root)
{
ArrayList<Integer> res = new ArrayList<>();
preorder(root, res);
return res;
}
public void preorder(TreeNode root, ArrayList<Integer> res)
{
if(root == null) return ;
res.add(root.val);
preorder(root.left, res);
preorder(root.right, res);
}
}
public class Solution
{
public ArrayList<Integer> preorderTraversal(TreeNode root)
{
ArrayList<Integer> res = new ArrayList<>();
if(root == null) return res;
Stack<TreeNode> stack = new Stack<>();
stack.add(root);
while(!stack.isEmpty())
{
TreeNode cur = stack.pop();
res.add(cur.val);
if(cur.right != null) stack.add(cur.right);
if(cur.left != null) stack.add(cur.left);
}
return res;
}
}
中序遍历
public class Solution
{
public ArrayList<Integer> inorderTraversal(TreeNode root)
{
ArrayList<Integer> res = new ArrayList<>();
inorder(root, res);
return res;
}
public void inorder(TreeNode root, ArrayList<Integer> res)
{
if(root == null) return ;
inorder(root.left, res);
res.add(root.val);
inorder(root.right, res);
}
}
public class Solution
{
public ArrayList<Integer> inorderTraversal(TreeNode root)
{
ArrayList<Integer> res = new ArrayList<>();
if(root == null) return res;
Stack<TreeNode> stack = new Stack<>();
while(root!=null || !stack.isEmpty())
{
while(root != null)
{
stack.add(root);
root = root.left;
}
root = stack.pop();
res.add(root.val);
root = root.right;
}
return res;
}
}
后序遍历
public class Solution
{
public ArrayList<Integer> postorderTraversal(TreeNode root)
{
ArrayList<Integer> res = new ArrayList<>();
postoder(root, res);
return res;
}
public void postoder(TreeNode root, ArrayList<Integer> res)
{
if(root == null) return;
postoder(root.left, res);
postoder(root.right, res);
res.add(root.val);
}
}
public class Solution
{
public ArrayList<Integer> postorderTraversal(TreeNode root)
{
ArrayList<Integer> res = new ArrayList<>();
if(root == null) return res;
Stack<TreeNode> stack = new Stack<>();
stack.add(root);
TreeNode pre = new TreeNode(0);
while(!stack.isEmpty())
{
TreeNode cur = stack.peek();
if(cur.left!=null && pre!=cur.left && pre!=cur.right) stack.add(cur.left);
else if(cur.right!=null && pre!=cur.right) stack.add(cur.right);
else
{
res.add(cur.val);
pre = stack.pop();
}
}
return res;
}
}