剑指offer java NO.07

本文介绍如何根据给定的前序遍历和中序遍历结果重建二叉树,并输出后序遍历结果。通过递归方式创建二叉树节点并进行遍历,附带完整的Java代码实现。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

NO.07 输入某二叉树的前序遍历和中序遍历的结果,请重建该二叉树。
例如输入的前序遍历序列{1,2,4,7,3,5,6,8}, 和中序遍历序列{4,7,2,1,5,3,8,6}. 最后请输出该二叉树的后序遍历结果。

先写个二叉树的类BinaryTreeNode

public class BinaryTreeNode {
    private char data;
    private BinaryTreeNode LchildNode;
    private BinaryTreeNode RchildNode;

    public BinaryTreeNode(char data) {
        super();
        this.data = data;
    }

    public BinaryTreeNode(char data, BinaryTreeNode LchildNode, 
    BinaryTreeNode RchildNode){
        super();
        this.data = data;
        this.LchildNode = LchildNode;
        this.RchildNode = RchildNode;
    }

    public char getData() {
        return data;
    }

    public void setData(char data) {
        this.data = data;
    }

    public BinaryTreeNode getLchildNode() {
        return LchildNode;
    }

    public void setLchildNode(BinaryTreeNode lchildNode) {
        LchildNode = lchildNode;
    }

    public BinaryTreeNode getRchildNode() {
        return RchildNode;
    }

    public void setRchildNode(BinaryTreeNode rchildNode) {
        RchildNode = rchildNode;
    }
}

算法实现代码:

public class NO07 {
    //根据前序遍历和中序遍历建立二叉树
    public static void main(String[] args) {
        String preOrder="12473568";
        String midOrder="47215386";
        BinaryTree tree=new BinaryTree(preOrder, midOrder, preOrder.length());
        //后序遍历
        tree.postRootTraverse(tree.root);
    }
}

class BinaryTree{
    BinaryTreeNode root;
    public BinaryTree(String preOrder, String midOrder, int count){
        if (count <= 0){
            return;
        }
        char c = preOrder.charAt(0);
        int i = 0;
        for (; i < count; i++) {
            if(c == midOrder.charAt(i)){
                break;
            }
        }
        root = new BinaryTreeNode(c);
        root.setLchildNode(new BinaryTree(preOrder.substring(1,i + 1), midOrder.substring(0,i), i).root);
        root.setRchildNode(new BinaryTree(preOrder.substring(i + 1), midOrder.substring(i + 1), count - 1 - i).root);
    }

    public void postRootTraverse(BinaryTreeNode root){
        if (root != null){
            postRootTraverse(root.getLchildNode());
            postRootTraverse(root.getRchildNode());
            System.out.println(root.getData());
            }
    }
}

此题的重点在于递归地进行二叉树的创建以及遍历。递归是重中之重,检验debug一下加深理解。

内容概要:本文深入解析了扣子COZE AI编程及其详细应用代码案例,旨在帮助读者理解新一代低门槛智能体开发范式。文章从五个维度展开:关键概念、核心技巧、典型应用场景、详细代码案例分析以及未来发展趋势。首先介绍了扣子COZE的核心概念,如Bot、Workflow、Plugin、Memory和Knowledge。接着分享了意图识别、函数调用链、动态Prompt、渐进式发布及监控可观测等核心技巧。然后列举了企业内部智能客服、电商导购助手、教育领域AI助教和金融行业合规质检等应用场景。最后,通过构建“会议纪要智能助手”的详细代码案例,展示了从需求描述、技术方案、Workflow节点拆解到调试与上线的全过程,并展望了多智能体协作、本地私有部署、Agent2Agent协议、边缘计算插件和实时RAG等未来发展方向。; 适合人群:对AI编程感兴趣的开发者,尤其是希望快速落地AI产品的技术人员。; 使用场景及目标:①学习如何使用扣子COZE构建生产级智能体;②掌握智能体实例、自动化流程、扩展能力和知识库的使用方法;③通过实际案例理解如何实现会议纪要智能助手的功能,包括触发器设置、下载节点、LLM节点Prompt设计、Code节点处理和邮件节点配置。; 阅读建议:本文不仅提供了理论知识,还包含了详细的代码案例,建议读者结合实际业务需求进行实践,逐步掌握扣子COZE的各项功能,并关注其未来的发展趋势。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值