【追求进步】树的子结构

题目描述

输入两颗二叉树A,B,判断B是不是A的子结构。
在线代码:
/**
public class TreeNode {
    int val = 0;
    TreeNode left = null;
    TreeNode right = null;

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

    }

}
*/
public class Solution {
    //根据剑指offer书上的思想写的代码,都知道树的遍历都有递归和非递归,这个题目是递归
    //判断二叉树A是否包含二叉树B,即就是root1是否包含root2
    public boolean HasSubtree(TreeNode root1,TreeNode root2) {
        boolean result=false;
        if(root1!=null&&root2!=null){
            if(root1.val==root2.val){//如果相等,那么继续查找
             result=DoesTree1HaveTree2(root1,root2);   
            }
            if(!result){
             result=HasSubtree(root1.left,root2);  //如果不相等,则查看root1的左结点中是否包含root2
             }
            if(!result){
             result=HasSubtree(root1.right,root2);//右边   
             }
        }
        return result;
    }
    //一个根结点相等之后的剩余操作
    public boolean DoesTree1HaveTree2(TreeNode proot1,TreeNode proot2){
        if(proot2==null){
            return true; //如果子结构为空,则肯定包含
        }
        if(proot1==null){
            return false;//如果大树为空就没意义
        }
        if(proot1.val!=proot2.val){
            return false;
        }
        //相等则递归root1的左边和root2的左边,之后是右边
        return DoesTree1HaveTree2(proot1.left,proot2.left)&&DoesTree1HaveTree2(proot1.right,proot2.right);
        
    }
}


### 前后端在决策实现中的分工 #### 1. 后端的主要职责 后端主要负责业务逻辑的处理以及数据存储和管理。对于决策的应用场景,后端通常承担以下任务: - **构建核心算法**:后端开发者需要设计并实现决策的核心逻辑,例如基于用户输入的主题(Theme)生成动态决策的数据结构[^1]。这可能涉及复杂的计算过程,比如权重分配、路径优化等。 - **持久化与检索**:为了支持长期运行的服务,后端还需要提供数据库接口来保存已创建的决策实例及其状态信息。当用户请求特定的知识节点时,后端能够快速查询到相关内容并返回给前端展示。 - **规则引擎集成**:某些情况下,企业级应用可能会引入专门的商业规则管理系统(Business Rules Management System, BRMS),而后端则需完成这些外部服务同内部模块之间的对接工作,确保可以根据实际环境调整策略配置文件从而影响最终呈现效果[^2]。 ```python def generate_decision_tree(theme_data): """模拟生成一棵简单的二叉分类""" root_node = {"value": theme_data["root"], "children": []} def add_child(parent, child_list): for item in child_list: new_node = { 'value': item['name'], 'condition': item.get('condition', None), 'children': [] } parent["children"].append(new_node) if isinstance(item.get("sub"), list): # 存在子分支继续递归添加 add_child(new_node, item["sub"]) initial_branches = theme_data.get("branches", []) add_child(root_node, initial_branches) return root_node ``` 此函数仅作为示意用途,在真实项目里应考虑更多边界条件及性能调优措施。 --- #### 2. 前端的关键角色 相比之下,前端更侧重于用户体验层面的设计和技术实现方面的工作内容如下所示: - **交互界面开发**: 利用HTML/CSS/JavaScript等相关技术栈搭建直观易懂的操作面板让用户可以轻松浏览整个决策流程图谱或者局部细节部分;同时也要兼顾响应速度和平滑过渡动画等因素提升整体满意度水平. - **可视化渲染**: 将来自服务器端传递过来经过序列化的JSON对象转换成图形形式展现出来便于观察者更好地理清思路脉络关系网状链接等等复杂模式下的表现形态.[^1] 以下是利用D3.js库绘制基本形布局的一个例子片段供参考学习之便. ```javascript const svgWidth = 800; const svgHeight = 600; // 创建SVG容器 const svg = d3.select("#tree-container") .append("svg") .attr("width", svgWidth) .attr("height", svgHeight); function renderTree(data){ const treeLayout = d3.tree().size([svgHeight - 50 , svgWidth / 2]); let nodes = d3.hierarchy(data); treeLayout(nodes); var linkGenerator = d3.linkHorizontal() .x(d => d.y) .y(d => d.x); // 绘制连线 svg.selectAll(".link") .data(nodes.descendants().slice(1)) .enter() .append("path") .attr("class","link") .attr("d", function (d) {return linkGenerator({source:d.parent,target:d});}); // 添加圆圈代表各个节点 svg.selectAll(".node") .data(nodes.descendants()) .enter() .append("circle") .attr("class","node") .attr("cx",(d)=>{return d.y}) .attr("cy",(d)=>{return d.x}) .attr("r",4.5); } renderTree(sampleDecisionTreeData); ``` 上述代码展示了如何通过编程手段把抽象的概念具体化为可感知的形式以便更好地服务于目标受众群体的实际需求情况之下做出合理的选择判断依据标准体系框架之内进行有效的沟通交流互动机制建立起来形成闭环反馈循环不断改进完善直至达到预期理想状态为止结束本次讨论环节谢谢大家! --- ### 总结说明 综上所述可以看出无论是从前端还是后台角度来看待同一个问题都会存在各自不同的侧重点所在之处各有千秋互有长短互补性强因此团队成员之间保持良好协作配合至关重要不可或缺共同进步成长才能创造出更大的价值回报社会贡献力量成就梦想未来无限光明前景广阔值得期待憧憬向往追求卓越永不止步奋斗前行路上携手共进共创辉煌明天![^2]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值