144 二叉树的前序遍历
递归 时间快,占用空间多
/**
* Definition for a binary tree node.
* public class TreeNode {
* int val;
* TreeNode left;
* TreeNode right;
* TreeNode() {}
* TreeNode(int val) { this.val = val; }
* TreeNode(int val, TreeNode left, TreeNode right) {
* this.val = val;
* this.left = left;
* this.right = right;
* }
* }
*/
class Solution {
public List<Integer> preorderTraversal(TreeNode root) {
List<Integer> list = new ArrayList<Integer>();
preorder(root,list);
return list;
}
public void preorder(TreeNode root,List<Integer> res) {
if (root==null) return;
res.add(root.val);
preorder(root.left, res);
preorder(root.right, res);
}
}
栈迭代
class Solution {
public List<Integer> preorderTraversal(TreeNode root) {
List<Integer> list = new ArrayList<Integer>();
if (root == null) return list;
Stack<TreeNode> stk = new Stack<TreeNode>();
stk.push(root);
// 检查弹出结点是否有左右子结点
while (stk.size() != 0) {
TreeNode node = stk.pop();
list.add(node.val);
// 先右子树入栈
if (node.right != null) {
stk.push(node.right);
}
if (node.left != null) {
stk.push(node.left);
}
}
return list;
}
}
94 二叉树的中序遍历
递归
class Solution {
public List<Integer> inorderTraversal(TreeNode root) {
List<Integer> list = new ArrayList<>();
inorder(root,list);
return list;
}
public void inorder(TreeNode root,List<Integer> list){
if(root==null) return;
inorder(root.left,list);
list.add(root.val);
inorder(root.right,list);
}
}
栈迭代
class Solution {
public List<Integer> inorderTraversal(TreeNode root) {
List<Integer> list = new ArrayList<>();
if (root==null) return list;
Stack<TreeNode> stk = new Stack<>();
stk.push(root);
while (stk.size() != 0) {
TreeNode node = stk.peek();
// left还在就斩断因果,入栈
if (node.left != null) {
stk.push(node.left);
node.left = null;
} else if (node.right != null) {
// 非叶子结点,还有一个右子树
list.add(stk.pop().val);
stk.push(node.right);
}else {
// 叶子结点
list.add(stk.pop().val);
}
}
return list;
}
}
145 二叉树的后序遍历
递归
class Solution {
public List<Integer> postorderTraversal(TreeNode root) {
List<Integer> list = new ArrayList<Integer>();
postorder(root,list);
return list;
}
public void postorder(TreeNode root, List<Integer> res) {
if (root == null) return;
postorder(root.left, res);
postorder(root