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

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

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

中序遍历:

递归实现:

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);
    }
}
相关文章
|
索引 Python
Pandas 高级教程——高级时间序列分析
Pandas 高级教程——高级时间序列分析
671 4
|
SQL Oracle 关系型数据库
sqoop的导入导出以及where条件过滤数据导出
sqoop的导入导出以及where条件过滤数据导出
|
人工智能 Rust Java
10月更文挑战赛火热启动,坚持热爱坚持创作!
开发者社区10月更文挑战,寻找热爱技术内容创作的你,欢迎来创作!
2728 44
|
9月前
|
存储 自然语言处理 自动驾驶
基于LLM打造沉浸式3D世界
阿里云数据可视化产品DataV团队一直在三维交互领域进行前沿探索,为了解决LLMs与3D结合的问题,近期在虚幻引擎内结合通义千问大模型家族打造了一套基于LLM的实时可交互3D世界方案,通过自然语言来与引擎内的3D世界进行交互。
958 160
|
10月前
|
存储 设计模式 监控
快速定位并优化CPU 与 JVM 内存性能瓶颈
本文介绍了 Java 应用常见的 CPU & JVM 内存热点原因及优化思路。
1026 166
|
8月前
|
存储 安全 API
认证支持全面碾压?Apipost的OAuth2.0与ASAP实战演示,Apifox用户看完扎心了
认证缺失的隐秘危机,你可能正在“裸奔”调试。开发者常忽视认证机制,导致API请求未携带合法令牌、OAuth2.0配置错误等问题,轻则调试失败,重则引发安全漏洞。Apifox在OAuth2.0和ASAP协议支持上存在缺陷,而Apipost不仅覆盖12种主流认证类型,还实现了OAuth2.0全流程自动化及ASAP秒级配置,重新定义API调试的安全边界。
|
8月前
|
前端开发 测试技术 开发者
类组件和函数组件的优缺点对比
类组件和函数组件的优缺点对比
259 57
|
8月前
|
前端开发
如何在React Router中定义404错误页面组件?
如何在React Router中定义404错误页面组件?
215 57
|
9月前
|
运维 负载均衡 算法
部署硬件负载均衡设备时要注意哪些问题?
部署硬件负载均衡设备时要注意哪些问题?
246 57
|
9月前
|
运维 负载均衡 测试技术
软件负载均衡和硬件负载均衡分别适合哪些场景?
软件负载均衡和硬件负载均衡分别适合哪些场景?
283 55