-
class Solution { public List<Integer> preorderTraversal(TreeNode root) { List<Integer> res = new ArrayList<>(); Stack<TreeNode> stk = new Stack<>(); if(root == null) return res; stk.push(root); res.add(root.val); TreeNode node = root; while(!stk.empty()){ while(node.left != null){ node = node.left; stk.push(node); res.add(node.val); } TreeNode tmp = stk.pop(); if(tmp.right != null){ tmp = tmp.right; stk.push(tmp); res.add(tmp.val); node = tmp; } } return res; } }
2.中序遍历
class Solution {
public List<Integer> inorderTraversal(TreeNode root) {
List<Integer> res = new ArrayList<>();
Stack<TreeNode> stk = new Stack<>();
if(root == null) return res;
stk.push(root);
TreeNode node = root;
while(!stk.empty()){
while(node.left != null){
node = node.left;
stk.push(node);
}
TreeNode tmp = stk.pop();
res.add(tmp.val);
if(tmp.right != null){
tmp = tmp.right;
stk.push(tmp);
node = tmp;
}
}
return res;
}
}
3.后序遍历
class Solution {
public List<Integer> postorderTraversal(TreeNode root) {
List<Integer> res = new ArrayList<>();
Stack<TreeNode> stk = new Stack<>();
if(root == null) return res;
stk.push(root);
res.add(root.val);
TreeNode node = root;
while(!stk.empty()){
while(node.right != null){
node = node.right;
stk.push(node);
res.add(node.val);
}
TreeNode tmp = stk.pop();
if(tmp.left != null){
tmp = tmp.left;
stk.push(tmp);
res.add(tmp.val);
node = tmp;
}
}
Collections.reverse(res);
return res;
}
}
后序遍历的思路太巧妙了吧!!
看的我瞠目结舌。
不过前序和中序确实是自己写出来的。还需多加练习。