递归
中序遍历
class Solution {
public List<Integer> inorderTraversal(TreeNode root) {
List<Integer> list = new LinkedList<>();
inorder(root,list);
return list;
}
private void inorder(TreeNode root,List<Integer> list){
if(root != null){
inorder(root.left,list);
list.add(root.val);
inorder(root.right,list);
}
}
}
前序遍历
class Solution {
public List<Integer> preorderTraversal(TreeNode root) {
List<Integer> list = new LinkedList<>();
preorder(root,list);
return list;
}
private void preorder(TreeNode root,List<Integer> list){
if(root!=null){
list.add(root.val);
preorder(root.left,list);
preorder(root.right,list);
}
}
}
后序遍历
class Solution {
public List<Integer> postorderTraversal(TreeNode root) {
List<Integer> list = new LinkedList<>();
postorder(root,list);
return list;
}
private void postorder(TreeNode root,List<Integer> list){
if(root!=null){
postorder(root.left,list);
postorder(root.right,list);
list.add(root.val);
}
}
}
非递归
中序遍历
class Solution {
public List<Integer> inorderTraversal(TreeNode root) {
Stack<TreeNode> stack = new Stack<>();
List<Integer> list = new LinkedList<>();
while(root!=null || !stack.isEmpty()){
if(root != null){
stack.push(root);
root = root.left;
}else{
root = stack.pop();
list.add(root.val);
root = root.right;
}
}
return list;
}
}
前序遍历
class Solution {
public List<Integer> preorderTraversal(TreeNode root) {
Stack<TreeNode> stack = new Stack<>();
List<Integer> list = new LinkedList<>();
while(root!=null || !stack.isEmpty()){
if(root!=null){
stack.push(root);
list.add(root.val);
root = root.left;
}else{
root = stack.pop();
root = root.right;
}
}
return list;
}
}
后序遍历
class Solution {
public List<Integer> postorderTraversal(TreeNode root) {
Stack<TreeNode> stack = new Stack<>();
LinkedList<Integer> list = new LinkedList<>();
while(root!=null || !stack.isEmpty()){
if(root!=null){
stack.push(root);
list.addFirst(root.val);
root = root.right;
}else{
root = stack.pop();
root = root.left;
}
}
return list;
}
}