JZ17 树的子结构

描述

输入两棵二叉树A,B,判断B是不是A的子结构。(ps:我们约定空树不是任意一个树的子结构)

首先还是复习下树的概念

树包含node、edge、root。

节点(Node):树中的每一个数据元素成为一个节点,节点是树的基本构成部分。

边(Edge):边也是树的基本构成部分。边有方向,连接两个节点,并表示它们之间的联系。

根节点(Root):根节点是树中唯一一个没有入边的节点。

路径(Path):路径是由边连接起来的节点的有序排列。

子节点集(Children):当一个节点的入边来自另一个节点时,称前者是后者的子节点,同一个节点的所有子节点构成子节点集。

父节点(Parent):一个节点是它出边所连接的所有节点的父节点。

兄弟节点(Sibling):同一个节点的所有子节点互为兄弟节点。

子树(Subtree):子树是一个父节点的某个子节点的所有边和后代节点所构成的集合。

叶节点(Leaf Node):没有子节点的节点称为叶节点。

层数(Level):一个节点的层数是指从根节点到该节点的路径中的边的数目。

高度(Height):树的高度等于所有节点的层数的最大值。

Mooc的大学计算机-python算法实践中二叉树的实现。

 

 然后回到题目里面,讨论组题解:对于两颗二叉树来说,要判断树B是不是树A的子结果,首先第一步在树A中查找与B根节点的值一样的节点。第二步就是判断树A中以R(B根节点的值)为根节点的子树是不是和树B具有相同的结构。

递归的终止条件是我们达到了树A或者树B的叶节点。

有地方要重点注意,DoesTree1haveTree2()函数中的两个 if 判断语句不能颠倒顺序。

class Solution:
    def HasSubtree(self, pRoot1, pRoot2):
        # write code here
        result = False
        if pRoot1 != None and pRoot2 != None:
            if pRoot1.val == pRoot2.val:
                result = self.DoesTree1haveTree2(pRoot1, pRoot2)
            if not result:
                result = self.HasSubtree(pRoot1.left, pRoot2)
            if not result:
                result = self.HasSubtree(pRoot1.right, pRoot2)
        return result
    def DoesTree1haveTree2(self, pRoot1, pRoot2):
        if pRoot2 == None:
            return True
        if pRoot1 == None:
            return False
        if pRoot1.val != pRoot2.val:
            return False
        return self.DoesTree1haveTree2(pRoot1.left, pRoot2.left) and self.DoesTree1haveTree2(pRoot1.right, pRoot2.right)

这里的DoesTree1haveTree2()函数中第一句if语句我有疑问,pRoot2等于None的时候,返回的是True。

解释是为了看看子结构是否遍历完(这道题还是不理解,多做几个树的题目再回来看)

<think>好的,用户需要查询JZ4760的技术文档或开发资料。首先,我需要确认JZ4760的基本信息。这是一款由北京君正(Ingenic)推出的MIPS架构处理器,主要用于嵌入式设备,如教育电子、工业控制等。接下来,用户可能无法直接获取到公开的技术文档,因为这类资料通常需要联系原厂或签署NDA。所以,我应该先建议用户访问君正官网,查找相关产品页面,或者联系他们的技术支持。另外,开发板资料和SDK也是关键,可能需要通过官方渠道申请。 然后,社区和论坛可能是个补充资源,比如GitHub或电子工程论坛,可能会有开发者分享的经验或代码片段。不过需要注意这些资料的完整性和准确性。 用户可能还想知道具体的技术参数,比如CPU架构、主频、外设接口等,这些可以在产品简介中找到。此外,软件开发工具链如编译器和调试工具的信息也很重要,可能需要指导用户如何配置环境。 最后,生成的相关问题需要覆盖可能遇到的后续需求,比如开发环境搭建、常见问题解决、应用案例比较等,帮助用户全面了解JZ4760的开发流程和资源获取途径。</think>关于JZ4760处理器的技术资料获取途径和关键信息整理如下: ### 1. 官方资料获取 - **官网产品页面**:建议访问北京君正官网查找JZ4760产品页面,通常包含处理器架构图、外设模块说明和电气特性参数[^1] - **开发套件申请**:需联系君正销售/技术支持获取SDK包(含BSP、驱动代码),示例代码结构一般为: ```c // JZ4760 GPIO初始化示例 void gpio_init(void) { REG_GPIO_DIR |= (1 << 5); // 设置GPIO5为输出模式 REG_GPIO_DATA |= (1 << 5); // 输出高电平 } ``` ### 2. 技术参数概要 $$ \text{核心配置} = \begin{cases} \text{主核心:XBurst MIPS32 1GHz} \\ \text{协处理器:FPU+VPU} \\ \text{内存接口:DDR2/LPDDR} \\ \text{视频解码:1080P@30fps H.264} \end{cases} $$ ### 3. 开发资源 - **调试工具链**:建议使用君正提供的mips-linux-gcc交叉编译器,版本要求≥4.6.3 - **硬件参考设计**:包含PCB布局指南(6层板设计)、电源树配置方案(最大功耗2.1W)等关键文档 ### 4. 社区资源 - 开源社区可见到部分外设驱动移植案例(如Linux 4.19内核补丁) - 某开发者论坛披露GPIO复用配置矩阵表[^2]: $$ \begin{bmatrix} \text{GPIO12} & \text{UART1_TXD} & \text{SPI0_CS} \\ \text{GPIO13} & \text{UART1_RXD} & \text{I2C0_SCL} \end{bmatrix} $$
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值