二叉树的中序遍历和后序遍历的递归与非递归代码示例

简介: 二叉树的中序遍历和后序遍历的递归与非递归代码示例

以下是二叉树中序遍历和后序遍历的递归与非递归代码示例:

中序遍历:

递归实现:

class TreeNode {
   
    int val;
    TreeNode left;
    TreeNode right;

    TreeNode(int val) {
   
        this.val = val;
    }
}

public class BinaryTreeTraversalExample {
   

    public static void inOrderTraversal(TreeNode root) {
   
        if (root == null) {
   
            return;
        }
        inOrderTraversal(root.left);
        System.out.print(root.val + " ");
        inOrderTraversal(root.right);
    }

    public static void main(String[] args) {
   
        // 构建二叉树
        TreeNode root = new TreeNode(1);
        root.left = new TreeNode(2);
        root.right = new TreeNode(3);
        root.left.left = new TreeNode(4);
        root.left.right = new TreeNode(5);

        // 执行中序遍历
        inOrderTraversal(root);
    }
}

非递归实现(使用栈):

class TreeNode {
   
    int val;
    TreeNode left;
    TreeNode right;

    TreeNode(int val) {
   
        this.val = val;
    }
}

public class BinaryTreeTraversalExample {
   

    public static void inOrderTraversalNonRecursive(TreeNode root) {
   
        if (root == null) {
   
            return;
        }

        Stack<TreeNode> stack = new Stack<>();
        TreeNode curr = root;

        while (!stack.isEmpty() || curr!= null) {
   
            if (curr!= null) {
   
                stack.push(curr);
                curr = curr.left;
            } else {
   
                curr = stack.pop();
                System.out.print(curr.val + " ");
                curr = curr.right;
            }
        }
    }

    public static void main(String[] args) {
   
        // 构建二叉树
        TreeNode root = new TreeNode(1);
        root.left = new TreeNode(2);
        root.right = new TreeNode(3);
        root.left.left = new TreeNode(4);
        root.left.right = new TreeNode(5);

        // 执行中序遍历
        inOrderTraversalNonRecursive(root);
    }
}

后序遍历:

递归实现:

class TreeNode {
   
    int val;
    TreeNode left;
    TreeNode right;

    TreeNode(int val) {
   
        this.val = val;
    }
}

public class BinaryTreeTraversalExample {
   

    public static void postOrderTraversal(TreeNode root) {
   
        if (root == null) {
   
            return;
        }
        postOrderTraversal(root.left);
        postOrderTraversal(root.right);
        System.out.print(root.val + " ");
    }

    public static void main(String[] args) {
   
        // 构建二叉树
        TreeNode root = new TreeNode(1);
        root.left = new TreeNode(2);
        root.right = new TreeNode(3);
        root.left.left = new TreeNode(4);
        root.left.right = new TreeNode(5);

        // 执行后序遍历
        postOrderTraversal(root);
    }
}

非递归实现(使用两个栈):

class TreeNode {
   
    int val;
    TreeNode left;
    TreeNode right;

    TreeNode(int val) {
   
        this.val = val;
    }
}

public class BinaryTreeTraversalExample {
   

    public static void postOrderTraversalNonRecursive(TreeNode root) {
   
        if (root == null) {
   
            return;
        }

        Stack<TreeNode> s1 = new Stack<>();
        Stack<TreeNode> s2 = new Stack<>();

        s1.push(root);

        while (!s1.isEmpty()) {
   
            TreeNode curr = s1.pop();
            s2.push(curr);

            if (curr.left!= null) {
   
                s1.push(curr.left);
            }
            if (curr.right!= null) {
   
                s1.push(curr.right);
            }
        }

        while (!s2.isEmpty()) {
   
            System.out.print(s2.pop().val + " ");
        }
    }

    public static void main(String[] args) {
   
        // 构建二叉树
        TreeNode root = new TreeNode(1);
        root.left = new TreeNode(2);
        root.right = new TreeNode(3);
        root.left.left = new TreeNode(4);
        root.left.right = new TreeNode(5);

        // 执行后序遍历
        postOrderTraversalNonRecursive(root);
    }
}
相关文章
二叉树的几个递归问题
二叉树的几个递归问题
46 0
非递归方式实现二叉树的前、中、后序遍历
非递归方式实现二叉树的前、中、后序遍历
【C++】非递归实现二叉树的前中后序遍历
【C++】非递归实现二叉树的前中后序遍历
【C++】非递归实现二叉树的前中后序遍历
|
存储 C++
二叉树的四种遍历方式(前序遍历,中序遍历,后序遍历,层序遍历)C++语言
二叉树的四种遍历方式(前序遍历,中序遍历,后序遍历,层序遍历)C++语言
230 0
|
数据采集 算法
数据结构与算法—二叉树的层序、前序中序后序(递归、非递归)遍历
层序遍历。听名字也知道是按层遍历。我们知道一个节点有左右节点。而每一层一层的遍历都和左右节点有着很大的关系。也就是我们选用的数据结构不能一股脑的往一个方向钻,而左右应该均衡考虑。这样我们就选用队列来实现。
198 0
数据结构与算法—二叉树的层序、前序中序后序(递归、非递归)遍历
|
算法 搜索推荐
从二叉树的前中后序遍历,我们来说递归和快速排序
从二叉树的前中后序遍历,我们来说递归和快速排序
从二叉树的前中后序遍历,我们来说递归和快速排序
|
算法 前端开发 JavaScript
「LeetCode」二叉树的先中后序遍历(递归版)⚡️
「LeetCode」二叉树的先中后序遍历(递归版)⚡️
120 0
「LeetCode」二叉树的先中后序遍历(递归版)⚡️
|
算法 前端开发 JavaScript
「LeetCode」二叉树的先中后序遍历(非递归版)⚡️
「LeetCode」二叉树的先中后序遍历(非递归版)⚡️
118 0
「LeetCode」二叉树的先中后序遍历(非递归版)⚡️