LeetCode--二叉树前中后遍历(迭代遍历)

二叉树前中后遍历(迭代遍历)

前序遍历
public List<Integer> preorderTraversal(TreeNode root) {
    List<Integer> res = new ArrayList<>();
    if (root == null) return res;
    Stack<TreeNode> stack = new Stack<>();
    stack.push(root);
    while (!stack.isEmpty()) {
        TreeNode node = stack.pop();
        res.add(node.val);
        //先右后左
        if (node.right != null) stack.push(node.right);
        if (node.left != null) stack.push(node.left);
    }
    return res;
}
中序遍历
public List<Integer> inorderTraversal(TreeNode root) {
    List<Integer> res = new ArrayList<>();
    if (root == null) return res;
    Stack<TreeNode> stack = new Stack<>();
    TreeNode cur = root;
    while (cur != null || !stack.isEmpty()) {
        //找最左边的节点
        while (cur != null) {
            stack.push(cur);
            cur = cur.left;
        }
        //弹出栈顶,访问
        cur = stack.pop();
        res.add(cur.val);
        //找右节点
        cur = cur.right;
    }
    return res;
}
后序遍历
//后序遍历相当于先序遍历的逆序
public List<Integer> postorderTraversal(TreeNode root) {
    List<Integer> res = new ArrayList<>();
    if (root == null) return res;
    Stack<TreeNode> stack = new Stack<>();
    stack.push(root);
    while (!stack.isEmpty()) {
        TreeNode cur = stack.pop();
        res.add(cur.val);
        if (cur.left != null) stack.push(cur.left);
        if (cur.right != null) stack.push(cur.right);
    }
    // 反转
    return res.reversed();
}

你可能感兴趣的:(LeetCode,java,算法)