144 . Binary Tree Preorder Traversal
Medium
递归:
public List<Integer> preorderTraversal(TreeNode root) {
List<Integer> results = new ArrayList<>();
preorderTraversal(root, results);
return results;
}
private void preorderTraversal(TreeNode root, List<Integer> results) {
if (root == null) return;
results.add(root.val);
preorderTraversal(root.left, results);
preorderTraversal(root.right, results);
}
栈:
public List<Integer> preorderTraversal(TreeNode root){
List<Integer> res = new ArrayList<Integer>();
if(root==null) return res;
Stack<TreeNode> stack = new Stack<TreeNode>();
TreeNode tn = root;
while(tn!=null||!stack.isEmpty()){
if(tn!=null){
res.add(tn.val);
if(tn.right!=null)
stack.push(tn.right);
tn = tn.left;
}else{
tn = stack.pop();
}
}
return res;
}
莫里斯:
public List<Integer> preorderTraversal(TreeNode root) {
List<Integer> results = new ArrayList<>();
TreeNode crt = root;
while (crt != null) {
if (crt.left == null) {
results.add(crt.val);
crt = crt.right;
} else {
TreeNode temp = crt.left;
while (temp.right != null && temp.right != crt)
temp = temp.right;
if (temp.right == null) {
results.add(crt.val);
temp.right = crt;
crt = crt.left;
} else {
temp.right = null;
crt = crt.right;
}
}
}
return results;
}
94 . Binary Tree Inorder Traversal
Medium
递归:
public List<Integer> inorderTraversal(TreeNode root) {
List<Integer> results = new ArrayList<>();
inorderTraversal(root, results);
return results;
}
private void inorderTraversal(TreeNode root, List<Integer> results) {
if (root == null) return;
inorderTraversal(root.left, results);
results.add(root.val);
inorderTraversal(root.right, results);
}
栈:
public List<Integer> inorderTraversal(TreeNode root) {
List<Integer> results = new ArrayList<>();
ArrayDeque<TreeNode> stack = new ArrayDeque<>();
TreeNode crt = root;
while (!stack.isEmpty() || crt != null) {
if (crt != null) {
stack.push(crt);
crt = crt.left;
} else {
crt = stack.pop();
results.add(crt.val);
crt = crt.right;
}
}
return results;
}
莫里斯:
public List<Integer> inorderTraversal(TreeNode root) {
List<Integer> results = new ArrayList<>();
TreeNode crt = root;
while (crt != null) {
if (crt.left == null) {
results.add(crt.val);
crt = crt.right;
} else {
TreeNode temp = crt.left;
while (temp.right != null && temp.right != crt)
temp = temp.right;
if (temp.right == null) {
temp.right = crt;
crt = crt.left;
} else {
temp.right = null;
results.add(crt.val);
crt = crt.right;
}
}
}
return results;
}