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

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

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

中序遍历:

递归实现:

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);
    }
}
相关文章
|
1月前
|
存储
二叉树的先序遍历和后序遍历的区别
先序遍历和后序遍历在遍历顺序、应用场景、实现方式以及复杂度等方面都存在一定的区别,在实际应用中需要根据具体问题的需求来选择合适的遍历方式。
67 5
非递归方式实现二叉树的前、中、后序遍历
非递归方式实现二叉树的前、中、后序遍历
|
算法 C语言
【递归调用在二叉树中的应用】前序遍历、中序遍历、后序遍历、求二叉树叶子结点及复制二叉树的C语言实现
【递归调用在二叉树中的应用】前序遍历、中序遍历、后序遍历、求二叉树叶子结点及复制二叉树的C语言实现
159 0
【递归调用在二叉树中的应用】前序遍历、中序遍历、后序遍历、求二叉树叶子结点及复制二叉树的C语言实现
【C++】非递归实现二叉树的前中后序遍历
【C++】非递归实现二叉树的前中后序遍历
【C++】非递归实现二叉树的前中后序遍历
|
iOS开发
二叉树非递归前中后遍历
因为个人身体原因,本周都在医院住院治疗身体,身边没有电脑,只能分享一些这周看过的比较好的书籍内容。iPad上传csdn图片顺序会有误,看书的页码就好。
二叉树非递归前中后遍历
|
存储 C++
二叉树的四种遍历方式(前序遍历,中序遍历,后序遍历,层序遍历)C++语言
二叉树的四种遍历方式(前序遍历,中序遍历,后序遍历,层序遍历)C++语言
240 0
|
算法 搜索推荐
从二叉树的前中后序遍历,我们来说递归和快速排序
从二叉树的前中后序遍历,我们来说递归和快速排序
从二叉树的前中后序遍历,我们来说递归和快速排序
|
算法 前端开发 JavaScript
「LeetCode」二叉树的先中后序遍历(非递归版)⚡️
「LeetCode」二叉树的先中后序遍历(非递归版)⚡️
122 0
「LeetCode」二叉树的先中后序遍历(非递归版)⚡️