中序
递归
public List<Integer> inorderTraversal(TreeNode root){
List<Integer> nodes = new ArrayList<>();
inorderDfs(root,nodes);
return nodes;
}
public void inorderDfs(TreeNode root,List<Integer> nodes){
if(root!=null){
inorderDfs(root.left,nodes);
nodes.add(root.value);
inorderDfs(root.right,nodes);
}
}
迭代
public List<Integer> inorderTraversal(TreeNode root){
List<Integer> nodes = new ArrayList<>();
Stack<TreeNode> stack = new Stack<>();
TreeNode cur = root;
while(cur!=null||!stack.empty()){
while (cur!=null){
stack.push(cur);
cur=cur.left;
}
cur = stack.pop();
nodes.add(cur.value);
cur=cur.right;
}
return nodes;
}
前序
递归
public List<Integer> preorderTraversal(TreeNode root){
List<Integer> nodes = new ArrayList<>();
preorderDfs(root,nodes);
return nodes;
}
public void preorderDfs(TreeNode root,List<Integer> nodes){
if(root!=null){
nodes.add(root.value);
preorderDfs(root.left,nodes);
preorderDfs(root.right,nodes);
}
}
迭代
public List<Integer> preorderTraversal(TreeNode root){
List<Integer> nodes = new ArrayList<>();
Stack<TreeNode> stack = new Stack<>();
TreeNode cur = root;
while(cur!=null||!stack.empty()){
while (cur!=null){
nodes.add(cur.value);
stack.push(cur);
cur=cur.left;
}
cur = stack.pop();
cur=cur.right;
}
return nodes;
}
后序
递归
public List<Integer> postorderTraversal(TreeNode root){
List<Integer> nodes = new ArrayList<>();
postorderDfs(root,nodes);
return nodes;
}
public void postorderDfs(TreeNode root,List<Integer> nodes){
if(root!=null){
postorderDfs(root.left,nodes);
postorderDfs(root.right,nodes);
nodes.add(root.value);
}
}
迭代
public List<Integer> postorderTraversal(TreeNode root){
List<Integer> nodes = new ArrayList<>();
Stack<TreeNode> stack = new Stack<>();
TreeNode cur = root;
TreeNode prev = null;
while(cur!=null||!stack.empty()){
while (cur!=null){
stack.push(cur);
cur=cur.left;
}
cur = stack.peek();
if(cur.right!=null&&cur.right!=prev){
cur = cur.right;
}else{
stack.pop();
nodes.add(cur.value);
prev = cur;
cur = null;
}
}
return nodes;
}